在添加属性时继承python类

时间:2014-09-02 23:41:57

标签: python design-patterns python-3.x

我在尝试在添加属性时继承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__

1 个答案:

答案 0 :(得分:1)

您正在寻找的是一种将子类B的实现细节公开给父类A.__init__的方法的方法。我会称之为反模式,而不是理想的。

如果父类的__init__(设置self.prop)的行为不适用于子类的实现,那么您应该在子类中重写__init__,以便不要拨打super().__init__

我同意Jon Clements' comment。你的代码的目标究竟是什么?通常,创建一个类来封装一些有用的行为。当子类从父类的行为中大量借用时可以从该类继承,并且可以这样做,而不会过多地与父类的内部相混淆。