屬性控制
1 .注意的第一點:get,set及獲取者或設置者使用同樣的名稱,對其區(qū)分的是裝飾器,裝飾器會適當?shù)闹孛瘢瑥亩苊獍l(fā)生沖突
2 .獲取 count(self)
3 .設置 count(self,value)
4 .動態(tài)語言的鴨子類型:不需要嚴格的繼承體系,只要有相同的方法磁浇,就可以看成是繼承過來的。
5 .所有的對象都具有python自動提供的某些特殊方法朽褪,比如class置吓,實際上是一個對象類的對象引用无虚,還有name屬性,表示類名衍锚。
繼承init函數(shù)
1 .init函數(shù)里面可以加上默認值
2 .我們需要的是子類定義自己的初始化函數(shù)友题,在子類中顯示調(diào)用父類,子類和父類的舒心哥都會被初始化
3 .情況1:如果子類定義了自己的初始化函數(shù)构拳,而在子類中沒有顯示的調(diào)用父類的初始化函數(shù)咆爽,則父類的屬性不會被初始化
4 .情況2:如果子類沒有定于i自己的初始化函數(shù),父類的初始化函數(shù)會被默認調(diào)用置森;但是如果要實例化子類的對象斗埂,則只是傳入父類的初始化函數(shù)對應的參數(shù)
super
1 .super(子類,self).init(參數(shù)1,參數(shù)2)
2 .父類.init(self,參數(shù)1,參數(shù)2)
多態(tài)
1 .子類和父類都存在相同的方法的時候凫海,子類的方法就會覆蓋父類的方法呛凶,在代碼云心改的時候,總是會調(diào)用子類的run方法
2 .
定制類
1 .len()方法是為了讓class作用于len()函數(shù)行贪,除此之外還有一些其他的類可以讓我們定制特殊的類
2 .str()返回用戶看到的字符串
3 .repr()返回程序開發(fā)者看到的字符串漾稀,其實和上面的差不多
4 .iter()如果想讓一個類被用于for...in循環(huán),類似list或者tuple那樣建瘫,就必須實現(xiàn)一個iter()方法該方法返回一個迭代對象崭捍,然后for循環(huán)就會不斷調(diào)用改迭代對象的下一個方法next()拿到循環(huán)的下一個值,直到遇到StopIteration錯誤時退出循環(huán)
class Fib(object):
def init(self):
self.a, self.b = 0, 1 # 初始化兩個計數(shù)器a啰脚,b
def __iter__(self):
return self # 實例本身就是迭代對象殷蛇,故返回自己
def __next__(self):
self.a, self.b = self.b, self.a + self.b # 計算下一個值
if self.a > 100000: # 退出循環(huán)的條件
raise StopIteration()
return self.a # 返回下一個值
5 .getitem(self,n):索引下標取出元素:還可以對傳入的n做判斷,比如是不是切片類型 if isinstance(n,slice):
6 .getattr():訪問一個類的屬性,可以返回默認值或者是一個函數(shù)(返回函數(shù)的時候需要加上括號來調(diào)用)
7 .
比較的特殊方法
1 .lt(self,other):x<y
2 .le(self,other):x<=y
3 .eq(self,other):x==y
4 . ...
基本的特殊方法
1 .bool(self):bool(x)
2 .format(self,format_spec):為自定義的類提供str.format支持
3 .hash(self):如果提供橄浓,那么x可用做字典的鍵或存放在集合中
4 .init(self,args):對象初始化的時候調(diào)用
5 .new(cls,args):創(chuàng)建對象的時候調(diào)用
6 .repr(self):返回x的字符串表示
7 .str():返回x適合閱讀的字符串表示形式
數(shù)值型與邏輯運算的特殊方法
1 .一般情況下粒梦,我們是不會重寫del()方法的。這個方法是不能用于釋放資源荸实,例如關閉文件匀们,斷開網(wǎng)絡連接,斷開數(shù)據(jù)庫連接准给。正確的資源釋放方式是使用try...finally ,另一種是將上下文對象和with一起使用