簡體   English   中英

在多個 inheritance - Python 中從父 class 調用特定方法

[英]Call specific method from parent class in multiple inheritance - Python

我有一個 class 和多個 inheritance。我想從一些父母的同名方法中連接 output。 理想情況下,我可以在不遍歷所有父 class 的情況下執行此操作,而是明確選擇我想要的案例。

class my_class1:
    def common_method(self): return ['dependency_1']

class my_class2:
    def common_method(self): return ['dependency_2']

class my_class3:
    def whatever(self): return 'ANYTHING'

class composite(my_class1, my_class2, my_class3):
    def do_something_important(self):
        return <my_class1.common_method()> + <my_class2.common_method()>

由於您不想使用語言機制來調用超級方法(通過超類中的所有方法設計為 go,即使是在編寫代碼時不知道的方法),只需顯式調用這些方法在您想要的課程上 - 使用 class 名稱。

唯一需要做的不同是您必須從class調用方法,而不是從實例調用方法,然后手動插入實例作為第一個參數。 Python 的自動self引用僅在調用最派生子類中的方法時有用(從這一點來看,在更常見的設計中,它將使用super在超類中運行其 coutnerparts)

為了使您的示例正常工作,您只需像這樣編寫它:

class my_class1:
    def common_method(self): return ['dependency_1']

class my_class2:
    def common_method(self): return ['dependency_2']

class my_class3:
    def whatever(self): return 'ANYTHING'

class composite(my_class1, my_class2, my_class3):
    def do_something_important(self):
        return my_class1.common_method(self) + my_class2.common_method(self)

但是,請注意,如果任何common_methods將在公共祖先基礎中調用super().common_method ,則該超級方法將在每次顯式調用子類的.common_method時運行一次。 如果你想專攻,那就去做吧。

換句話說,如果你願意,一個“超級”對應物允許你指定在調用方法時訪問哪些超類,並確保那些調用的任何超類方法只運行一次——我可行,但很復雜並且容易出錯。 如果您可以像本示例中那樣使用顯式類,它會簡單 100 倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM