2017-08-01 103 views
-1

我必須定義一個從另一個類繼承的類(稱爲ABC)(稱之爲SuperABC)。我繼承的類(SuperABC)有一個我需要使用的方法(我們稱之爲func)。但問題是我必須在類ABC中定義一個名稱相同的方法(即func),該方法調用SuperABC類的func方法並執行其他操作。我意識到如果我可以繼承SuperABCfunc方法,但使用不同的別名,則可以解決此問題。是否有可能這樣做?Python - 從一個類繼承一個方法,但名稱不同

目前我剛剛從SuperABC類複製func方法,將其添加到ABC類,並將其名稱更改爲_func。有沒有其他方法可以做到這一點?

最後,我看了一下super的用法。但從我讀到的,看起來像super可以解決目前的問題,如果我只從一個類繼承該方法。如果我從SuperABCBatABC繼承,並希望通過更改名稱或任何其他方法在ABC類的func方法中使用兩個func方法?是否有可能這樣做?

+1

在ABC.func()裏面調用'SuperABC.func()'有什麼問題? – Evert

回答

2

你大概意思是這樣的:

class ABC(SuperABC): 
    def _func(*args, **kwargs): 
     return SuperABC.func(*args, **kwargs) 

如果你想擺脫原來func添加的實際繼承:

def func(*args, **kwargs): 
     return 

另一種方式來做到這一點第二步是在__init__階段更改func,但如果沒有仔細完成,則可能會覆蓋其中的其他內容。

如果你想繼承2 func從2個不同的類(和func在兩個相同的名字),你必須定義一箇中介類改變其中的一個第一名稱

0

只是轉發呼叫。

def _func(*args, **kwargs): 
    return func(*args, **kwargs) 
+0

'_func = func'會更簡單,效率更高(因爲它避免了構造和調用附加函數)。 – chepner

0

如果需要做這種特別的方式:

subclass_function_name = super().parentfunctionname 

如果你正在使用Python 2,你需要添加ARGS超()。請注意,這是而不是對父函數名稱的調用,但對函數對象的引用。

相關問題