Python中的空函數和方法重載

沒有函數體的函數

  • 在閱讀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')
  • 代碼執(zhí)行結果:
Student is studying
Student is reading
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容