我已经用JAVA作为我的第一语言学习了OOP原则,然后我转到了Python,因此这个特殊功能对我来说有点奇怪,虽然在很多情况下很有用。
但是,我想知道它是否真的可行。
以下会在JAVA中出错,因为您无法访问父类中子类的属性。
class parent(object):
def print_x(self):
print self.x
class child(parent):
x = 10
child().print_x()
在这种情况下,PEP8 也会发出警告:
在我个人看来,代码遍历和调试变得有点问题。类'父'
的未解析属性引用'x'
答案 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