python學習第九章

1.構造方法:只要把init方法的名字從簡單的init修改爲__init__即可:def __init__(self):。
2.子類調用超類的構造方法:在自己的構造方法內添加:SuperClass.__init__(self)。在調用一個實例的方法時,該方法的self參數會被自動綁定到實例上。但如果直接調用類的方法(比如上面的那句代碼),那麼就沒有實例會被綁定。這樣就可以自由地提供需要的self參數。這樣的方法稱爲未綁定方法。通過將當前的實例作爲self參數提供給未綁定方法,子類就能夠使用其超類構造方法的所有實現。
3.使用super函數:super函數只能在新式類中起作用。所以需要在超類使用__metaclass__=type這句代碼來聲明此超類是一個新式類。然後在子類的構造方法中使用super(SonClass,self).__init__()就可以調用超類的構造方法了(SonClass是子類)。
4.property函數:在新式類中應該使用property函數而不是訪問器方法(get,set方法)。property函數可以用0,1,2,3或者4個參數來調用。如果沒有參數,產生的屬性既不可讀也不可寫。如果只是用一個參數調用(即只有一個取值方法),產生的屬性是隻讀的,第三個參數(可選)是一個用於刪除特性的方法。第四個參數是一個文檔字符串。property的4個參數分別被叫做fget,fset,fdel和doc。
5.靜態方法和類成員方法:靜態方法和類成員方法分別在創建時分別被裝入staticmethod類型和classmethod類型的對象中。靜態方法的定義沒有self參數,且能夠被類本身直接調用。類方法在定義時需要名爲cls的類似於self的參數,類成員方法可以直接用類的具體對象調用。cls參數是自動被綁定到類的。可以使用@staticmethod和@classmethod這樣的裝飾器在方法上進行修飾,相當於java裏的註解。
6.爲了在訪問特性的時候可以執行代碼,必須使用一些魔法方法,如下:__getattribute__(self,name):當特性name被訪問時自動被調用(只能在新式類中使用)。__getattr__(self,name):當特性name被訪問且對象沒有相應的特性時被自動調用。__setattr__(self,name,value):當試圖給特性name賦值時會被自動調用。__delattr__(self,name):當試圖刪除特性name時被自動調用。
7.迭代器:__iter__方法返回一個迭代器,這個迭代器具有next方法(和java裏的Iterator一樣)。一個實現了__iter__方法的對象是可迭代的,一個實現了next方法的對象則是迭代器。
8.生成器:任何包含yield語句的函數稱爲生成器。它的行爲和普通的函數有很大的差別。它不是像return那樣返回值,而是每次產生多個值。每次產生一個值(使用yield),函數就會被凍結:即函數停在那點等待被激活。函數被激活後就從停止的那點開始執行。
發佈了75 篇原創文章 · 獲贊 6 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章