Python - 从一个类继承一个方法,但名称不同

问题描述:

我必须定义一个从另一个类继承的类(称为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

你大概意思是这样的:

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

如果你想摆脱原来func添加的实际继承:

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

另一种方式来做到这一点第二步是在__init__阶段更改func,但如果没有仔细完成,则可能会覆盖其中的其他内容。

如果你想继承2 func从2个不同的类(和func在两个相同的名字),你必须定义一个中介类改变其中的一个第一名称

只是转发呼叫。

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

'_func = func'会更简单,效率更高(因为它避免了构造和调用附加函数)。 – chepner

如果需要做这种特别的方式:

subclass_function_name = super().parentfunctionname 

如果你正在使用Python 2,你需要添加ARGS超()。请注意,这是而不是对父函数名称的调用,但对函数对象的引用。