首页 > 解决方案 > 在Python中初始化构造函数之外的继承类

问题描述

我有这样的事情:

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。基本上,我想知道这里的最佳做法是什么。

标签: pythoninheritancemultiple-inheritance

解决方案


如果可以的话,我总是更喜欢组合而不是继承。原因是多方面的,但让我们试着列举几个:

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

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


推荐阅读