1.OOP(オブジェクト指向プログラミング)
-
思想:
- モジュール式思考でエンジニアリングの問題を解決する
- プロセス指向とオブジェクト指向
- プロセス指向からオブジェクト指向へ
- たとえば、私は学校を開きたいと思っています。
- 講師
- 校長
- 学生
- 教室
- 。。。。。。。。
-
一般的な名詞
- OO:オブジェクト指向
- OOA:分析
- OOD:デザイン
- OOP:プログラミング
- OOI:実装
- OOA-> OOD-> EOI
-
クラスとオブジェクト(2つは属性関係ですが、構成関係ではありません)
- クラス:抽象、コレクションの説明、共通性に焦点を当てる(学生クラス)
- オブジェクト:具体的、個人を説明する(張氏)
-
クラスの内容:
- アクション、機能
- 属性、変数
-
クラスを定義します:classキーワード
-
クラスの命名:
- 大きなこぶに従ってください(各単語の最初の文字は大文字です)
- 最初の文字を大文字にする
# 定义学生类,和几个学生
class Student():
# 此处定义一个空类
# pass是关键字,表示占位用的,无意义(养成好习惯)
pass
# 定义一个对象
zhangsan = Student()
# 定义时,全体缩进
class PythonStudent():
name = "Nobody"
age = 20
course = "Python"
'''
定义类中的函数,一般要有self关键字
其余跟普通函数基本相同
'''
def giveMoney(self):
print("show me the money")
return None
lisi = PythonStudent()
print(lisi.name)
print(lisi.age)
print(lisi.course)
誰も
20
のPython
2.クラスの属性
# 类的例子
# 注意类的定义
class Student():
# name,age是类的变量
name = "amy"
age = 20
def sayHi(self):
print("类的属性")
return None
def sayHello(koko):
print("将self替换为koko")
return None
# 实例化
lisi = Student()
print(lisi)
2.1自己
- 自己は別の名前に置き換えることができます
- 自己はキーワードではありません
- 役割はそれ自体を指します
# self举例
# 实例调用函
honghong = Student() # 实例化yaoyao
# 让honghong跟我打招呼
# honghong调用sayHi没有输入参数
# 因为迷人实例作为第一个传入的参数,即honghong代替self
honghong.sayHi()
# 错误的案例:
# a = "你好"
# honghong.sayHi(a)
クラス属性
#这个案例说明self的名称可以更改,实际上self为形参
honghong.sayHello()
自分をココに置き換える
2.2クラス変数スコープの問題
- クラス変数:クラス自体に属する変数
- インスタンス変数:インスタンスに属する変数
- 次の2つのケースの要約:
- インスタンスのプロパティを定義した後、インスタンスのプロパティにアクセスするときは、インスタンス自体のプロパティへのアクセスが優先されます。そうでない場合は、クラスのプロパティにアクセスします。
# 案例1:
# 注意类的定义
class Student():
# name,age是类的变量
name = "amy_77"
age = 20
def sayHi(self):
print("My Name is {}, i am {} years old".format(self.name,self.age))
self.age = 21
self.name = "NoName"
return None
# 此案例说明,实例变量可以借用类的变量
qianqian = Student()
qianqian.sayHi()
私の名前はamy_77です。20歳です。
# 案例2:
# 注意类的定义
class Student2():
# name,age是类的变量
name = "amy_77"
age = 20
def sayHi(self, n, a ): # 实例变量,给self定义自己的变量name和age
self.name = n
self.age = a
print("My Name is {}, i am {} years old".format(self.name,self.age))
return None
# 此案例说明,实例变量可以借用类的变量
qianqian = Student2()
# 注意观察下面语句打开和关闭后的区别
# qianqian.sayHi("yuanyuan", 30)
print("My Name is {}, i am {} years old".format(Student2.name,Student2.age))
print("My Name is {}, i am {} years old".format(yuanyuan.name,yuanyuan.age))
#若果访问实例的属性没有定义,则自动访问类的属性
# 如果类也没有定义,则报错
私の名前はamy_77、私は20歳です
私の名前はamy_77、私は20歳です
2.3クラスのプロパティへのアクセス
- クラス内のクラスの属性へのアクセスを強制する場合は、__ class __(前後に2つのアンダースコア)を使用する必要があります。
- クラスメソッド:
- クラスのメソッドを定義するとき、自己パラメータはありません
- クラスのコンテンツのみがクラスのメソッドで許可されます
- 2つの方法
- クラス名
- __クラス__(前後に2つのアンダースコア)
class Student3():
# name,age是类的变量
name = "amy_77"
age = 20
def sayHi(self):
print("My Name is {}, i am {} years old".format(self.name,self.age))
return None
# SOS是类的方法
def SOS():
# 类方法中不允许访问实例的任何内容
#print("My Name is {}, i am {} years old".format(self.name,self.age))
# 如果访问想要类的内容,有下面两种方法:
print("My Name is {}, i am {} years old".format(Student3.name,__class__.age))
return None
# 体验类的方法
s = Student3()
s.sayHi()
# 调用类方法的例子
Student3.SOS()
# SOS() takes 0 positional arguments but 1 was given
# SOS()接受0个位置参数,但给出了1个
私の名前はamy_77、私は20歳です
私の名前はamy_77、私は20歳です
2.4コンストラクタ
- クラスがインスタンス化されると、いくつかの基本的な初期化作業が実行されます
- 特別な名前と言葉遣いを使用する
- インスタンス化時に自動的に実行されます
- インスタンス化時に実行される「最初の」関数ですか
class Student4():
name = "Everybody"
age = 0
# 构造函数名称固定,写法相对固定
def __init__(self):
print("我是一个构造函数")
qianqian = Student4()
print("*******************")
print(qianqian.name)
print(qianqian.age)
私はコンストラクターです
みんな
0
3.オブジェクト指向の3つの特徴
- 継承
- カプセル化
- ポリモーフィズム
3.1継承(Pythonはホイールを繰り返さない)
- 品詞は、親クラスなどで定義されたコンテンツや動作を使用できます。
- 継承の実装:
-
親クラス、基本クラス、スーパークラス:継承クラス、基本クラス、スーパークラス
-
サブクラス、継承された動作を持つクラス
-
すべてのクラスには親クラスが必要です
-
そうでない場合、デフォルトはオブジェクトの品詞です
-
# 所有类必须有父类
# 默认为object
class Person1():
pass
class Person2(object):
pass
class Person():
name = "NoName"
age = 0
# 父类写在类定义的时候的括号里
class Teacher(Person):
pass
t = Teacher()
print(t.name)
ノーネーム
class Bird():
fly = "Yes,I can"
def flying(self):
print("飞呀飞呀")
class BirdMan(Person, Bird):
pass
bm = BirdMan()
bm.flying()
print(bm.name
Fly Fly
NoName
3.2 issubclassは、それがサブクラスであるかどうかを検出します
- 2つのクラスの親子関係を検出するために使用できます
# 利用刚才定义的Bird,BirdMan,Person,Teacher,检测父子关系
print(issubclass(BirdMan, Bird))
print(issubclass(BirdMan, Person))
print(issubclass(BirdMan, Teacher))
# help(issubclass)
真
偽
偽
4.コンストラクター
- 関数がインスタンス化されたときに呼び出される関数
- 自動通話
- 請求:
- 最初のパラメータが存在する必要があり、通常は自己として推奨されます
- コンストラクターの呼び出し時間:一般的に、インスタンス化時に初めて呼び出されると考えられています。
- 通常、手動で呼び出されるのではなく、インスタンス化されると自動的に呼び出されます。パラメータは、クラス名の後に角かっこで囲む必要があります。
class Bird():
def __init__(self):
print("我被调用了")
return None
# 此时被调用构造函数
b = Bird()
私は呼ばれた
# 构造函数2
class Person():
def __init__(self, name, age):
print(name, age)
p = Person("amy", 21)
エイミー21
4.1コンストラクターの継承
- コンストラクターのデフォルトの継承
- サブクラスがコンストラクターを定義すると、親クラスのコンストラクターが自動的に呼び出されなくなります
# 构造函数默认继承
class Person():
def __init__(self, name, age):
print("Person = ({}, {})".format(name, age))
# Teacher自动继承上面的构造函数
class Teacher(Person):
pass
t = Teacher("amy", 21)
t = Teacher()# 此代码报错
人=(エイミー、21)