1如果如圖所示使用多重繼承,我們將看到什麼 2我們看到了基類被執行了兩次Baseclass 3代碼驗證吧 4改進措施 5完美解決=基類執行了一次 6代碼驗證 參考:本文參考學習《Python3 Object Oriented Programming》,根據自己理解改編,Dusty Phillips ...
1如果如圖所示使用多重繼承,我們將看到什麼
2我們看到了基類被執行了兩次Baseclass
3代碼驗證吧
class BaseClass: num_base_calls = 0 def call_me(self): print("Calling method on Based Class") self.num_base_calls += 1 class LeftSubclass(BaseClass): num_left_calls = 0 def call_me(self): BaseClass.call_me(self) print("Calling method on Left Subclass") self.num_left_calls += 1 class RightSubclass(BaseClass): num_right_calls = 0 def call_me(self): BaseClass.call_me(self) print("Calling method on Right Subclass") self.num_right_calls += 1 class Subclass(LeftSubclass, RightSubclass): num_sub_calls = 0 def call_me(self): LeftSubclass.call_me(self) RightSubclass.call_me(self) print("Calling method on Subclass") self.num_sub_calls += 1 s = Subclass() s.call_me() print(s.num_sub_calls, s.num_left_calls, s.num_right_calls, s.num_base_calls)
4改進措施
5完美解決=基類執行了一次
6代碼驗證
class BaseClass: num_base_calls = 0 def call_me(self): print("Calling method on Based Class") self.num_base_calls += 1 class LeftSubclass(BaseClass): num_left_calls = 0 def call_me(self): # BaseClass.call_me(self) super().call_me() print("Calling method on Left Subclass") self.num_left_calls += 1 class RightSubclass(BaseClass): num_right_calls = 0 def call_me(self): # BaseClass.call_me(self) super().call_me() print("Calling method on Right Subclass") self.num_right_calls += 1 class Subclass(LeftSubclass, RightSubclass): num_sub_calls = 0 def call_me(self): # LeftSubclass.call_me(self) # RightSubclass.call_me(self) super().call_me() print("Calling method on Subclass") self.num_sub_calls += 1 s = Subclass() s.call_me() print(s.num_sub_calls, s.num_left_calls, s.num_right_calls, s.num_base_calls)
參考:本文參考學習《Python3 Object Oriented Programming》,根據自己理解改編,Dusty Phillips 著