我有这样的东西:
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
。基本上,我想知道最佳实践是什么。
答案 0 :(得分:1)
如果可以的话,我总是更喜欢组合而不是继承。原因多种多样,但让我们尝试列举一些原因:
因此,如果可以的话,我会介绍您的第二个解决方案。