__slots__:限制該class實例能添加的屬性,__slots__
定義的屬性僅對當前類實例起做用,對繼承的子類是不起做用的。python
@property:Python內置的一個裝飾器,負責把一個方法變成屬性調用。函數
把一個getter方法變成屬性,只須要加上@property
就能夠了;spa
把一個setter方法變成屬性賦值,@property
自己會建立了另外一個裝飾器@score.setter。
設計
還能夠定義只讀屬性,只定義getter方法,不定義setter方法就是一個只讀屬性。code
多重繼承:對象
CLASS 類名(父類1,父類2,......) 例如:class Dog(Mammal, Runnable)
繼承
例如:class Dog(Mammal, RunnableMixIn, CarnivorousMixIn)
字符串
__str__:返回自定義的字符串格式。get
__iter__:調用__iter__()
將一個類實現for ... in
循環,相似list或tuple,該方法返回一個迭代對象,Python的for循環就會不斷調用該迭代對象的__next__()
方法拿到循環的下一個值,直到遇到StopIteration
錯誤時退出循環。it
__getitem__:像list那樣按照下標取出元素,須要實現__getitem__()
方法。
__getattr__:動態返回一個屬性,當調用不存在的屬性時,Python解釋器會試圖調用__getattr__()
來嘗試得到屬性。
__call__:能夠直接對實例進行調用其屬性和方法。經過callable()
函數,能夠判斷一個對象是不是「可調用」對象。
Enum
能夠把一組相關常量定義在一個class中,且class不可變,並且成員能夠直接比較。
@unique
裝飾器能夠幫助咱們檢查保證沒有重複值。
元類:
type():能夠查看一個類型或變量的類型,type()
函數既能夠返回一個對象的類型,又能夠建立出新的類型
要建立一個class對象,type()
函數依次傳入3個參數:
一、class的名稱;
二、繼承的父類集合,Python支持多重繼承,若是隻有一個父類,注意tuple的單元素寫法;
三、class的方法名稱與函數綁定。
metaclass:先定義metaclass,就能夠建立類,最後建立實例。metaclass容許你建立類或者修改類。