<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 單繼承 ~~~ # 定義一個父類,如下: class Cat(object): def __init__(self, name, color="白色"): self.name = name self.color = color def run(self): print("%s--在跑"%self.name) # 定義一個子類,繼承Cat類如下: class Bosi(Cat): def setNewName(self, newName): self.name = newName def eat(self): print("%s--在吃"%self.name) bs = Bosi("印度貓") print('bs的名字為:%s'%bs.name) print('bs的顏色為:%s'%bs.color) bs.eat() bs.setNewName('波斯') bs.run() ~~~ 運行結果: ![](https://box.kancloud.cn/b2ceecdc0f61cb2bb38d084fef76ef05_346x224.png) 說明: * 雖然子類沒有定義`__init__`方法,但是父類有,所以在子類繼承父類的時候這個方法就被繼承了,所以只要創建Bosi的對象,就默認執行了那個繼承過來的`__init__`方法 * 子類在繼承的時候,在定義類時,小括號()中為父類的名字 * 父類的屬性、方法,會被繼承給子類 # 多繼承 ~~~ # 定義一個父類 class A: def printA(self): print('----A----') # 定義一個父類 class B: def printB(self): print('----B----') # 定義一個子類,繼承自A、B class C(A,B): def printC(self): print('----C----') obj_C = C() obj_C.printA() obj_C.printB() ~~~ 運行結果: ~~~ ----A---- ----B---- ~~~ ## 對象搜索方法時的先后順序 如果在上面的多繼承例子中,如果父類A和父類B中,有一個同名的方法,那么通過子類去調用的時候,調用哪個? ~~~ #coding=utf-8 class base(object): def test(self): print('----base test----') class A(base): def test(self): print('----A test----') # 定義一個父類 class B(base): def test(self): print('----B test----') # 定義一個子類,繼承自A、B class C(A,B): pass obj_C = C() obj_C.test() print(C.__mro__) #可以查看C類的對象搜索方法時的先后順序 ~~~ 輸出 ~~~ ----A test---- (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.base'>, <class 'object'>) ~~~ # 多繼承的問題 ![](https://box.kancloud.cn/bd4b41bea58641d8ae175b06aa5c46a6_520x558.png) ~~~ class Parent(object): def __init__(self, name): print('parent的init開始被調用') self.name = name print('parent的init結束被調用') class Son1(Parent): def __init__(self, name, age): print('Son1的init開始被調用') self.age = age Parent.__init__(self, name) print('Son1的init結束被調用') class Son2(Parent): def __init__(self, name, age): print('Son2的init開始被調用') self.age = age Parent.__init__(self, name) print('Son2的init結束被調用') class Grandson(Son1, Son2): def __init__(self, name, age, gender): print('Grandson的init開始被調用') Son1.__init__(self, name, age) Son2.__init__(self, name, gender) print('Grandson的init結束被調用') print('---多繼承發生的狀態---') gs = Grandson('gradson', 12, '男') ~~~ 輸出 ~~~ ---多繼承發生的狀態--- Grandson的init開始被調用 Son1的init開始被調用 parent的init開始被調用 parent的init結束被調用 Son1的init結束被調用 Son2的init開始被調用 parent的init開始被調用 parent的init結束被調用 Son2的init結束被調用 Grandson的init結束被調用 ~~~ 發現多繼承調用的父類的構造方法被調用多次 ## 解決 用super ~~~ class Parent(object): # 為了避免報錯,用不定長參數 def __init__(self, name, *args, **kwargs): print('parent的init開始被調用') self.name = name print('parent的init結束被調用') class Son1(Parent): # 為了避免報錯,用不定長參數 def __init__(self, name, gender, *args, **kwargs): print('Son1的init開始被調用') super().__init__(name, *args, **kwargs) print('Son1的init結束被調用') class Son2(Parent): # 為了避免報錯,用不定長參數 def __init__(self, name, gender, *args, **kwargs): print('Son2的init開始被調用') super().__init__(name, *args, **kwargs) print('Son2的init結束被調用') class Grandson(Son1, Son2): def __init__(self, name, age, gender): print('Grandson的init開始被調用') # 如果里面指定,那就按mro從指定的往后面找 # super(Grandson, self).__init__(self, age, gender) super().__init__(self, age, gender) print('Grandson的init結束被調用') print('---多繼承發生的狀態---') gs = Grandson('gradson', 12, '男') ~~~
                  <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>

                              哎呀哎呀视频在线观看