python物件導向高階程式設計

2022-08-20 07:30:09 字數 1170 閱讀 7665

1.繫結方法

給所有例項都繫結方法,可以給class繫結方法:

>>> def set_score(self, score):

... self.score = score

...

>>> student.set_score = set_score

給class繫結方法後,所有例項均可呼叫。

但是,如果我們想要限制例項的屬性怎麼辦?比如,只允許對student例項新增nameage屬性。

為了達到限制的目的,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...