【发布时间】:2019-07-31 15:11:17
【问题描述】:
我有这样的事情:
from some_module import SomeClass
class BaseClass:
...
class AnotherClass(BaseClass, SomeClass):
def __init__(self, parameter, **kwargs):
BaseClass.__init__(**kwargs)
self.parameter
def some_abstract_method(self, **kwargs):
# this is an abstract method declared in BaseClass
# and the arguments **kwargs must be passed here
# to respect the interface
SomeClass.__init__(self.parameter, **kwargs)
SomeClass.do_something()
return self
我这样做的原因是尊重BaseClass的接口。我想知道像这样构造对象AnotherClass 有多糟糕,以及是否有更好的方法来实现我想要做的事情。我能想到的唯一其他方法是做这样的事情:
class AnotherClass(BaseClass):
def __init__(self, parameter, **kwargs):
super().__init__(**kwargs)
self.parameter
def some_abstract_method(self, **kwargs):
self.model = SomeClass(self.parameter, **kwargs)
self.model.do_something()
return self.model
但我不喜欢它,因为AnotherClass 本质上是与SomeClass 相同的对象。基本上,我想知道这里的最佳做法是什么。
【问题讨论】:
-
这里还不够继续。请查看创建minimal reproducible example。
-
如果你使用多重继承,你真的应该使用
super。
标签: python inheritance multiple-inheritance