1類的定義
1.1類的組成
屬性 | 具體屬性 | 特點 |
---|---|---|
方法 | 構造方法 | 構造方法用於構造實例對象,__init__,傳入參數第一個必須是self |
方法 | 成員方法 | 成員方法定義在類中,第一個參數必須是self,方法前加__ |
方法 | 私有方法 | 私有方法不能由外部調用,第一個參數必須是self |
方法 | 靜態方法 | 靜態方法不依賴於實例對象,同時也不能調用類方法和類屬性,用@staticmethod修飾 |
方法 | 類方法 | 類方法不依賴實例對象,但是必須傳入參數cls,代表類本身,因此可以調用類方法和變量,用classmethod修飾 |
屬性 | 成員屬性 | 在構造方法中定義的屬性,可由實例對象調用 |
屬性 | 私有屬性 | 在構造方法中定義的屬性,只能由類對象內部調用,屬性名前加__ |
屬性 | 類屬性 | 在類中定義的屬性,不依賴實例對象調用 |
1.2類的定義格式
定義格式如下:
lass ClassName:
clsname=“”#定義類變量
@staticmethod#定義靜態方法,靜態方法不依託實例對象存在,但是也不能調用成員變量和成員方法
def staticname():
@classmethod#定義類方法,類方法不依託實例對象存在,同時類變量需要傳入cls參數(類本身參數),因此可以調用和修改類變量
def classmethodname(cls):
def__init__(self,arg1,arg2):#定義構造方法,需要傳入固定self參數(實例對象本身)#####__init__千萬不能寫成int
self.arg1=arg1 #定義成員屬性
self.__arg2=arg2 #定義私有屬性,外部不可訪問和調用,只能通過類成員方法訪問
def set_arg2(self): #定義成員方法,可以修改私有屬性
def __method(self) #定義私有方法,外部不可調用,只能通過成員方法調用
實例演示如下:
>>> class Dog:
... classname="狗類"
... @staticmethod
... def state():
... print("這是一個狗類")
... @classmethod
... def favorite(cls):
... print(cls.classname+":狗喜歡喫骨頭")
... def __init__(self,name,age):
... self.name=name
... self.__age=age
... def set_age(self,age):
... if not isinstance(age,int):
... print("年齡必須是整數!")
... elif age<=0:
... print("年齡必須大於0!")
... else:
... self.__age=age
... def show(self):
... self.play()
... def play(self):
... print("汪汪汪")
...
>>> Dog.classname
'狗類'
>>> Dog.favorite()
狗類:狗喜歡喫骨頭
>>> dog.name
'旺財'
>>> dog.set_age(5)
>>> dog.show()
汪汪汪
>>>
2類的繼承和多態
2.1類的繼承
繼承語法如下:
class SubClass(BaseClass1,BaseClass2):
語法塊
注意:
1.繼承直接在類名後面加括號、帶上父類名稱;
2.python中可以繼承多個類;
3.子類不能繼承父類的私有方法,也不能調用;
2.2類的多態
子類對父類的同名方法進行復寫。