Python - 从一个类继承一个方法,但名称不同
我必须定义一个从另一个类继承的类(称为ABC
)(称之为SuperABC
)。我继承的类(SuperABC
)有一个我需要使用的方法(我们称之为func
)。但问题是我必须在类ABC
中定义一个名称相同的方法(即func
),该方法调用SuperABC
类的func
方法并执行其他操作。我意识到如果我可以继承SuperABC
的func
方法,但使用不同的别名,则可以解决此问题。是否有可能这样做?Python - 从一个类继承一个方法,但名称不同
目前我刚刚从SuperABC
类复制func
方法,将其添加到ABC
类,并将其名称更改为_func
。有没有其他方法可以做到这一点?
最后,我看了一下super
的用法。但从我读到的,看起来像super
可以解决目前的问题,如果我只从一个类继承该方法。如果我从SuperABC
和BatABC
继承,并希望通过更改名称或任何其他方法在ABC
类的func
方法中使用两个func
方法?是否有可能这样做?
你大概意思是这样的:
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)
'_func = func'会更简单,效率更高(因为它避免了构造和调用附加函数)。 – chepner
如果需要做这种特别的方式:
subclass_function_name = super().parentfunctionname
如果你正在使用Python 2,你需要添加ARGS超()。请注意,这是而不是对父函数名称的调用,但对函数对象的引用。
在ABC.func()里面调用'SuperABC.func()'有什么问题? – Evert