<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] >[success] # 調用父類方法 ~~~ 1.講解繼承中的super() 函數 在py2 和py3的區別 2.py2 中使用需要super(當前子類,self).調用方法 例如super(FooChild,self).__init__() 3.py3 直接super.調用方法 4.super 繼承的機制是Python會計算出一個所謂的方法解析順序(MRO)列表,為了實現繼承,Python會在MRO列表上從左到 右開始查找基類,直到找到第一個匹配這個屬性的類為止。 5.子類會先于父類被檢查,多個父類會根據它們在列表中的順序被檢查,如果對下一個類存在兩個合法的選擇,選擇第一個父類 ~~~ >[danger] ##### 案例 -- 重寫 ~~~ 1.當子類,繼承父類,且沒有使用super()情況下,子類就會吧父類的方法重寫 ~~~ ~~~ class A: def spam(self): print('A.spam') class B(A): def spam(self): print('B.spam') b = B() b.spam() 打印結果: B.spam ~~~ >[danger] ##### 案例 -- super() 繼承 ~~~ 1.可以先調用父類方法在執行子類的方法,或者翻過來 ~~~ ~~~ class A: def spam(self): print('A.spam') class B(A): def spam(self): print('B.spam') # 繼承 super().spam() b = B() b.spam() ~~~ >[danger] ##### 不使用super() 繼承不建議使用、 ~~~ 1.直接使用繼承的父類調用方法,在多繼承的時候就會出現調用多次的情況,然而直接使用super 就不會出現這種問題 ~~~ ~~~ class Base: def __init__(self): print('Base.__init__') class A(Base): def __init__(self): Base.__init__(self) print('A.__init__') class B(Base): def __init__(self): Base.__init__(self) print('B.__init__') class C(A,B): def __init__(self): A.__init__(self) B.__init__(self) print('C.__init__') ~~~ * 打印結果: ~~~ c = C() Base.__init__ A.__init__ Base.__init__ B.__init__ C.__init__ ~~~ >[danger] ##### 參看子類的執行順序__mro__ ~~~ class Base: def __init__(self): print('Base.__init__') class A(Base): def __init__(self): super().__init__() print('A.__init__') class B(Base): def __init__(self): super().__init__() print('B.__init__') class C(A,B): def __init__(self): super().__init__() # Only one call to super() here print('C.__init__') print(C.__mro__) 打印結果: (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.Base'>, <class 'object'>) ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看