1.クラスとオブジェクト
1.1定義
構文:
クラスクラス名():
コード
1.2オブジェクトの作成
構文:
オブジェクト名=クラス名()
class Animal():
def func(self):
print("animal")
animal = Animal()
animal.func()
1.3属性
クラス外にオブジェクト属性を追加します:
構文:
オブジェクト名。属性=値
クラス外のオブジェクトプロパティを取得します:
構文:
オブジェクト名。プロパティ
class Person():
def func(self):
print("person")
p = Person()
p.name = "Tom"
p.age = 18
print(f"姓名{p.name},年龄:{p.age}")
クラス内のオブジェクト属性を取得します:
構文:
self。属性名
class Person():
def func(self):
print(f"姓名:{self.name},年龄:{self.age}")
p = Person()
p.name = "Tom"
p.age = 18
p.func()
1.4マジックメソッド
1.4.1_ init _
関数:オブジェクトを初期化します
class Person():
def __init__(self):
self.name = "Tom"
self.age = 18
def func(self):
print(f"姓名:{self.name},年龄:{self.age}")
注:
_ init _は、オブジェクトの作成時にデフォルトで呼び出されます。手動で呼び出す必要はありません(C ++コンストラクターと同等)
。selfパラメーターで_ init _を呼び出す必要はなく、開発者が渡す必要はありません。
# 带参数的_init_()
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
def func(self):
print(f"姓名:{self.name},年龄:{self.age}")
1.4.2 _ str _
printを使用してオブジェクトを出力する場合、デフォルトではオブジェクトのメモリアドレスが出力されます。_ str _メソッドが定義されている場合、このメソッドの戻りデータが出力されます。オブジェクトのステータスを出力するために使用されます
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return "Person"
p = Person("Tom",18)
print(p) # Person
1.4.3 _ del _
オブジェクトを削除するときは、_ del _()メソッドを呼び出します
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
def __del__(self):
print(f"姓名:{self.name},年龄:{self.age}")
p = Person("Tom",18)
del p
2.継承
2.1構文
クラス親クラス名():
コード
クラスサブクラス名(親クラス名):
コード
多重継承:
class Father():
def __init__(self):
self.hair = "black"
def __str__(self):
return self.hair
class Mother():
def __init__(self):
self.hair = "brown"
def _str_(self):
return self.hair
class Son(Father,Mother):
pass
s = Son()
print(s)
クラスに複数の親クラスがある場合、最初の親クラスと同じ名前のプロパティとメソッドがデフォルトで使用されます。
サブクラスは親クラスのメソッドをオーバーライドできます。
2.2サブクラスは、同じ名前の親クラスのプロパティとメソッドを呼び出します
class Father():
def __init__(self):
self.hair = "black"
def __str__(self):
return self.hair
class Mother():
def __init__(self):
self.hair = "brown"
def _str_(self):
return self.hair
class Son(Father,Mother):
def __init__(self):
self.hair = "blond"
#调用父类的方法,但是为保证调用到的也是父类的属性,必须在调用方法前调用父类的初始化
def father_hair(self):
Father.__init__(self)
def mother_hair(self):
Mother.__init__(self)
def son_hair(self):
# 如果先调用了父类的属性和方法,父类属性会覆盖子类属性故先调用子类的属性初始化
self.__init__()
def _str_(self):
return self.hair
s = Son()
s.father_hair()
print(s)
s.mother_hair()
print(s)
s.son_hair()
print(s)
2.3 super()は親クラスメソッドを呼び出します
構文1:
super(現在のクラス名、self)
。function ()構文2:
super()。function()
def parents_hair(self):
super().__init__()
def son_hair(self):
super(Son,self).__init__()
2.4プライベートオーソリティ
構文:
self .__ attribute name = value
self .__ function name():
class Father():
def __init__(self):
self.__money = 1000 # 私有权限
class Son(Father):
pass
3.ポリモーフィズム
ポリモーフィズムはオブジェクトを使用する方法です。サブクラスは親メソッドをオーバーライドし、異なるサブクラスオブジェクトの同じ親メソッドを呼び出すため、異なる実行結果が生成される可能性があります。
class Father():
def func(self):
print("father")
class Son(Father):
def func(self):
print("son")
class Daughter(Father):
def func(self):
print("daughter")
class Person():
def person_func(self,p):
p.func()
s = Son()
d = Daughter()
p = Person()
p.person_func(s)
p.person_func(d)
4.クラス属性とインスタンス属性
クラス属性は、クラスオブジェクトが所有する属性であり、
クラスのすべてのインスタンスオブジェクトによって共有されます。クラス属性には、クラスオブジェクトまたはインスタンスオブジェクトを使用してアクセスできます
。構文:クラス名。属性名。
クラスの利点属性:
記録されたデータの特定の項目が常に一貫している場合、クラス属性を定義します。
インスタンス属性では、データを記録するために各オブジェクトが個別のメモリスペースを開く必要がありますが、クラス属性はすべてのクラスで共有され、1つのメモリのみを占有します。より多くのメモリスペースを節約します
クラス属性は、インスタンスオブジェクトではなく、クラスオブジェクトを介してのみ変更できます
。構文:クラス名。属性名=値
5.クラスメソッドと静的メソッド
5.1クラスメソッド
デコレータ@classmethodを使用して、クラスメソッドとして識別する必要があります。クラスメソッドの場合、最初のパラメータはクラスオブジェクトである必要があり、通常はclsが最初のパラメータとして使用されます。
# 当方法中需要使用类对象时,定义类方法,类方法一般和类属性配合使用
class Father():
__money = 100
@classmethod
def get_money(cls):
return cls.__money
5.2静的メソッド
はデコレータ@staticmethodでデコレーションする必要があります。静的メソッドはクラスオブジェクトやインスタンスオブジェクトを渡す必要はありません。
静的メソッドにはインスタンスオブジェクトやクラスオブジェクトからもアクセスできます。
class Person():
@staticmethod
def func():
print("Person")