1. 類和對象
1. 定義類
class 類名:
執(zhí)行語句...
零到多個類變量...
零到多個方法...
- 類名:由一個或多個有意義的單詞連綴而成的祟霍,每個單詞首字母大寫歪泳,其他字母小寫锉屈,單詞與單詞之間不要使用任何分隔符
- 類變量屬于類本身,用于定義該類本身所包含的狀態(tài)數(shù)據(jù)
- 實例變量屬于該類的對象办龄,用于定義對象所包含的狀態(tài)數(shù)據(jù)
- 方法則用于定義該類的對象的行為或功能實現(xiàn)
- init構(gòu)造方法烘绽,del析構(gòu)方法
2. 對象的產(chǎn)生和使用
3. 實例方法
對于在類體中定義的實例方法,Python會自動綁定方法中的第一個參數(shù)(通常建議將該參數(shù)命名為self)俐填,第一個參數(shù)總是指向調(diào)用該方法的對象安接。在構(gòu)造方法中,self參數(shù)(第一個參數(shù))代表該構(gòu)造方法正在初始化的對象英融。
class Dog:
def run(self):
print('這是run方法')
def jump(self):
self.run()
print('這是jump方法')
2. 方法
方法是類或?qū)ο蟮男袨樘卣鞯某橄?/p>
1. 類也能調(diào)用實例方法
# 全局變量的定義
def foo():
print('全局變量的foo方法')
bar = 200
class Brid:
# 定義Bird空間的foo函數(shù)
def foo():
print('Bird空間的foo方法')
def walk(self):
print(self,'正在走')
bar = 200
# 調(diào)用
foo()
print(bar)
Brid.foo()
print(Brid.bar)
# Brid.walk() 報錯
Brid.walk('abc')
2. 類方法與靜態(tài)方法
@classmethod 裝飾的是類方法盏檐,類方法的第一個參數(shù)(建議用cls參數(shù))
@staticmethod 裝飾的是靜態(tài)方法
3. @函數(shù)裝飾器
當(dāng)程序使用“@函數(shù)”(比如函數(shù)A)裝飾另一個函數(shù)(比如函數(shù)B),實際上完成以下兩步:
- 將被裝飾的函數(shù)(函數(shù)B)作為參數(shù)傳給@符號引用的函數(shù)(函數(shù)A)
- 將函數(shù)B替換(裝飾)成第1步返回的結(jié)果
可以看出被裝飾的函數(shù)驶悟,不再是原來的函數(shù)胡野,而是替換成一個新的東西。
上面定義了一個裝飾器函數(shù)foo痕鳍,執(zhí)行完返回的不是普通值硫豆,而是bar函數(shù),這意味著被@foo修飾的函數(shù)最終都會被替換成bar函數(shù)笼呆。上面程序使用@foo裝飾my_test熊响,因此程序會執(zhí)行foo(my_test),并將my_test替換成foo()函數(shù)的返回值:bar函數(shù)。程序會兩次調(diào)用my_test()函數(shù)抄邀,其實是調(diào)用bar()函數(shù)
4. 類命名空間
3. 成員變量
1. 類變量和實例變量
2. 使用property函數(shù)定義屬性
propetty(fegt=None,fset=None,fdel=None,doc=None)
4. 隱藏和封裝
python并不能真正的支持封裝
只要將Python類的成員命名為以雙下劃線開頭的耘眨,python就會將他們隱藏起來
5. 類的繼承
1. 單繼承
class SubClass(superClass1, superClass2, ...):
# 類定義部分
2. 多繼承
雖然在語法上明確支持多繼承昼榛,但通產(chǎn)推薦境肾,如果不是很有必要,盡量不要使用多繼承胆屿,避免很多麻煩
當(dāng)一個子類有很多個直接父類時奥喻,該子類會繼承得到所有父類的方法。如果多個父類有同名的方法非迹,排在前面的父類中的方法會”遮蔽“在后面的父類中的同名方法环鲤。
3. 重寫父類的方法
4. 使用未綁定方法調(diào)用被重寫的方法
5. 使用super函數(shù)調(diào)用父類的構(gòu)造方法
排在前面的父類的同名方法會遮蔽后面父類的同名方法