在Python中的构造函数外部初始化继承的类

时间:2019-07-31 15:11:17

标签: python inheritance multiple-inheritance

我有这样的东西:

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。基本上,我想知道最佳实践是什么。

1 个答案:

答案 0 :(得分:1)

如果可以的话,我总是更喜欢组合而不是继承。原因多种多样,但让我们尝试列举一些原因:

  • 周围物体的状态更少
  • 不违反单一关注点范式。
  • 不冒无意间发生名称冲突的风险。
  • 更容易测试。
  • 松耦合。

因此,如果可以的话,我会介绍您的第二个解决方案。