python - 在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
。基本上,我想知道这里的最佳做法是什么。
解决方案
如果可以的话,我总是更喜欢组合而不是继承。原因是多方面的,但让我们试着列举几个:
- 周围物体的状态较少。
- 不违反单一关注范式。
- 不会冒无意的名称冲突的风险。
- 更容易测试。
- 松耦合。
因此,如果可以的话,我会采用您的第二个解决方案。
推荐阅读
- javascript - Javascript 在移动浏览器中不起作用
- javascript - typeof a where var a = 2 + [] is string 的解释是什么?
- vb.net - 通过匹配文件名中的字符串将文件从一个文件夹复制到另一个文件夹,并通过将日期和时间附加到文件名来重命名复制的文件
- python - 非规范化公司名称的 DataFrame [第 1 部分]
- if-statement - ARRAYFORMULA 但仅在行中出现 EMPTY 单元格 - 不起作用
- algorithm - 计算数组的深度
- java - 什么算法可用于以最佳方式在 A1 尺寸的纸张上包装规则形状
- css - 将 CSS box-shadow 应用于 SVG 中的形状而不是矩形 SVG 画布
- java - 如何使用 mouseClicked 从不同的类切换 JPanel?
- javascript - 为什么 javascript fetch() 返回 403 而 python-requests 返回 200?