1.繫結方法
給所有例項都繫結方法,可以給class繫結方法:
>>> def set_score(self, score):
... self.score = score
...
>>> student.set_score = set_score
給class繫結方法後,所有例項均可呼叫。
但是,如果我們想要限制例項的屬性怎麼辦?比如,只允許對student例項新增name
和age
屬性。
為了達到限制的目的,python允許在定義class的時候,定義乙個特殊的__slots__
變數,來限制該class例項能新增的屬性。
class student(object):
__slots__ = ('name', 'age') # 用tuple定義允許繫結的屬性名稱
使用__slots__
要注意,__slots__
定義的屬性僅對當前類例項起作用,對繼承的子類是不起作用的。除非在子類中也定義__slots__
,這樣,子類例項允許定義的屬性就是自身的__slots__
加上父類的__slots__
。
3.使用@property
@property
的實現比較複雜,我們先考察如何使用。把乙個方法變成屬性,只需要在方法前加上@property
就可以,@property
本身又建立了另乙個裝飾器@score.setter
,負責把乙個setter方法變成屬性賦值,於是,我們就擁有乙個可控的屬性操作。如果沒有加上@score.setter,該屬性就變成唯讀屬性。
只定義getter方法,不定義setter方法就是乙個唯讀屬性。
4.多重繼承
python 物件導向高階程式設計
python 裝飾器 property使用 classscreen property defwidth self returnself.width pass width.setter defwidth self,value self.width value property defheight se...
物件導向高階程式設計
相同class的各物件互為友元 class complex int func const complex param private double re,im string inline string string const char cstr 0 else inline string strin...
Python十二 物件導向高階程式設計
當定義了乙個class,建立了乙個class的例項後,我們可以給該例項繫結任何屬性和方法,這就是動態語言的靈活性 給例項繫結乙個屬性 class student object pass s student s.name michael 動態給例項繫結乙個屬性 print a.name michael...