我在尝试在添加属性时继承python类时遇到了问题。为了说明,定义以下类:
class A:
def __init__(self, prop, x1, x2):
self.prop = prop
self.x = x1 + x2
class B(A):
def __init__(self, prop, x1, x2):
super().__init__(prop, x1, x2)
@property
def prop(self):
return self._prop
@prop.setter
def prop(self, value):
self._prop = value + 10
现在,班级B
想要调用班级A
的{{1}}方法,该方法会调用__init__
的设置者。但我不想这样做,而是想直接设置B.prop
。有没有一个很好的方法来实现这个目标?
以下是我通过尝试检测我们是否已经_prop
进行检测而提出的解决方案,但我希望听到一些替代方案。
__init__
答案 0 :(得分:1)
您正在寻找的是一种将子类B
的实现细节公开给父类A.__init__
的方法的方法。我会称之为反模式,而不是理想的。
如果父类的__init__
(设置self.prop
)的行为不适用于子类的实现,那么您应该在子类中重写__init__
,以便不要拨打super().__init__
。
我同意Jon Clements' comment。你的代码的目标究竟是什么?通常,创建一个类来封装一些有用的行为。当子类从父类的行为中大量借用时可以从该类继承,并且可以这样做,而不会过多地与父类的内部相混淆。