在父类中访问子类属性是一个好主意

时间:2017-08-25 15:15:14

标签: python class inheritance attributes

我已经用JAVA作为我的第一语言学习了OOP原则,然后我转到了Python,因此这个特殊功能对我来说有点奇怪,虽然在很多情况下很有用。

但是,我想知道它是否真的可行。

以下会在JAVA中出错,因为您无法访问父类中子类的属性。

class parent(object):
    def print_x(self):
        print self.x


class child(parent):
    x = 10

child().print_x()
在这种情况下,

PEP8 也会发出警告:

  

类'父'

的未解析属性引用'x'
在我个人看来,代码遍历和调试变得有点问题。

2 个答案:

答案 0 :(得分:3)

也许这是一个依赖注入更合适的地方(组合与继承)。一个“父母”可以充分利用它的“孩子”。这就是可疑的。

如何做更多的事情:

class Container(object):
    def __init__(self, child_instance):
        self.child = child_instance

    def print_x(self):
        print self.child.x

class Child(object):
    def __init__(self, x):
        self.x = x

child = Child(10)
parent = Container(child)
parent.print_x()

在很多情况下,组合代替继承有许多优点,比如这个,我强烈建议你研究它们。

答案 1 :(得分:1)

更清洁的方式是

class Parent(object):

    @property
    def x(self):
        raise NotImplementedError

    def print_x(self):
        print self.x


class Child(Parent):
    x = 10