沒有函數體的函數
- 在閱讀python源碼的時候, 常常能看到很多函數體為空 (pass) 的類方法, 這一度令我感到十分困惑. 例如 BaseServer 類中的service_actions方法:
def service_actions(self):
pass
多重繼承
- python是一門支持多繼承的語言.
- 通過多繼承, 如果想要獲得來自不同類的功能, 我們只要選擇組合不同的類的功能,在定義類的時候依次作為父類傳入即可.
class ChildClass(BaseClass1, BaseClass2):
pass
父類成員的調用順序
- 如果在實例上調用一個沒有綁定的方法, 那么python解釋器會根據傳參的順序, 首先從參數中最左邊的父類開始查找, 然后查找它的父類, 直到繼承鏈的終點. 接下來在二個父類上開始同樣的查找過程.
- 也就是說如果多個父類中定義了同名的方法, 那么實例在調用這個方法的時候, 只有最左邊父類中的類方法會被調用.
重載
- 如果在實例中定義了和類同名的屬性, 那么在實例上訪問這個屬性的時候, 父類屬性將會被屏蔽, 這就是重載, 在調用方法的時候同樣也會發(fā)生.
- 重載不僅僅可以發(fā)生在父類和子類, 類和實例這樣的繼承關系中, 還常常在多重繼承中被使用.
- 在下面的代碼中, 我們將利用方法重載的機制, 實現(xiàn)父類之間的關聯(lián). 以此體現(xiàn)出python源代碼中大量"空函數"的作用.
class Human():
def __init__(self, name):
self.name = name
self.study()
self.read()
def study(self):
pass
def read(self):
pass
class Student():
def study(self):
print('%s is studying'%__class__.__name__)
def read(self):
print('%s is reading'%__class__.__name__)
class Teenager(Student, Human):
def __init__(self, name):
super().__init__(name)
Jack = Teenager('Jack')
Student is studying
Student is reading
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。