Python多继承mro示例
生活随笔
收集整理的這篇文章主要介紹了
Python多继承mro示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Python多繼承mro示例
以下是python方法解析順序的示例,詳細的解釋見代碼的注釋部分。
# 1 解釋python mro的執行順序,詳見數字序號的順序 class Base(object):def __init__(self): # 11. 進入 Base.__init__print("enter Base") # 12. 打印 enter Baseprint("leave Base") # 13. 打印 leave Base class A(Base):def __init__(self): # 5. 進入 A.__init__print("enter A") # 6. 打印 enter A# 7. 這里將分為兩步執行# 7.1 執行 c.__class__.mro()_# 7.2 返回 MRO 列表中的第三個元素,也就是 Bsuper(A, self).__init__()print("leave A") # 15. 打印 leave Aclass B(Base):def __init__(self): # 8. 進入 B.__init__print("enter B") # 9. 打印 enter B# 10. 這里將分為兩步執行# 10.1 執行 c.__class__.mro()_# 10.2 返回 MRO 列表中的第四個元素,也就是 Basesuper(B, self).__init__()print("leave B") # 14. 打印 leave Aclass C(A, B):def __init__(self): # 2. 實例 C ,會進入 __init__print("enter C") # 3. 打印 enter C# 4. 這里將分為兩步執行# 4.1 執行 c.__class__.mro()# 4.2 返回 MRO 列表中的第二個元素,也就是 Asuper(C, self).__init__()print("leave C") # 16. 打印 leave Ac = C() # 1. 首先代碼會從這里開始執行。 print(c.__class__.mro())""" enter C enter A enter B enter Base leave Base leave B leave A leave C [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.Base'>, <class 'object'>] """# 2 這里需要特殊說明,python3里的super其實是mro里的“super”,而不是按照子類的supper順序走。 class BaseClass:num_base_calls = 0def call_me(self):print("Calling method on Base Class")self.num_base_calls += 1class LeftSubclass(BaseClass):num_left_calls = 0def call_me(self):super().call_me()print("Calling method on Left Subclass")self.num_left_calls += 1class RightSubclass(BaseClass):num_right_calls = 0def call_me(self):super().call_me()print("Calling method on Right Subclass")self.num_right_calls += 1class Subclass(LeftSubclass, RightSubclass):num_sub_calls = 0def call_me(self):super().call_me()print("Calling method on Subclass")self.num_sub_calls += 1s = Subclass() s.call_me() print(s.__class__.mro())''' Calling method on Base Class Calling method on Right Subclass Calling method on Left Subclass Calling method on Subclass [<class '__main__.Subclass'>, <class '__main__.LeftSubclass'>, <class '__main__.RightSubclass'>, <class '__main__.BaseClass'>, <class 'object'>]'''?
總結
以上是生活随笔為你收集整理的Python多继承mro示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python多继承基础
- 下一篇: 为什么英国印度殖民统治期间为其扩张领土