使用@property
Python內(nèi)置的@property裝飾器就是負(fù)責(zé)把一個(gè)方法變成屬性調(diào)用的
把一個(gè)getter方法變成屬性亮隙,只需要加上@property就可以了久妆,此時(shí)伶丐,@property本身又創(chuàng)建了另一個(gè)裝飾器@score.setter,負(fù)責(zé)把一個(gè)setter方法變成屬性賦值,于是,我們就擁有一個(gè)可控的屬性操作
@property廣泛應(yīng)用在類的定義中廓译,可以讓調(diào)用者寫出簡(jiǎn)短的代碼,同時(shí)保證對(duì)參數(shù)進(jìn)行必要的檢查债查,這樣非区,程序運(yùn)行時(shí)就減少了出錯(cuò)的可能性。
"單下劃線" 開始的成員變量叫做保護(hù)變量盹廷,意思是只有類對(duì)象和子類對(duì)象自己能訪問(wèn)到這些變量征绸;
"雙下劃線" 開始的是私有成員,意思是只有類對(duì)象自己能訪問(wèn)俄占,連子類對(duì)象也不能訪問(wèn)到這個(gè)數(shù)據(jù)管怠。
同時(shí)單下劃線為了便于測(cè)試
@peoperty 是繼承或者說(shuō)限定一個(gè)不變的屬性,他只能讀取,不能接收
@繼承者.setter 是將上面的不變屬性進(jìn)行數(shù)據(jù)接收并且進(jìn)行數(shù)據(jù)傳遞的
多重繼承
MixIn的目的就是給一個(gè)類增加多個(gè)功能,這樣缸榄,在設(shè)計(jì)類的時(shí)候排惨,我們優(yōu)先考慮通過(guò)多重繼承來(lái)組合多個(gè)MixIn的功能,而不是設(shè)計(jì)多層次的復(fù)雜的繼承關(guān)系碰凶。
Python自帶的很多庫(kù)也使用了MixIn。舉個(gè)例子鹿驼,Python自帶了TCPServer和UDPServer這兩類網(wǎng)絡(luò)服務(wù)欲低,而要同時(shí)服務(wù)多個(gè)用戶就必須使用多進(jìn)程或多線程模型,這兩種模型由ForkingMixIn和ThreadingMixIn提供畜晰。通過(guò)組合砾莱,我們就可以創(chuàng)造出合適的服務(wù)來(lái)。
比如凄鼻,編寫一個(gè)多進(jìn)程模式的TCP服務(wù)腊瑟,定義如下:
class MyTCPServer(TCPServer, ForkingMixIn):
? ? pass
由于Python允許使用多重繼承聚假,因此,MixIn就是一種常見的設(shè)計(jì)闰非。
只允許單一繼承的語(yǔ)言(如Java)不能使用MixIn的設(shè)計(jì)膘格。