Python中的继承和内部类?
在下面的代码中,类 B 从类 A 继承了 yay 这个属性,我对此是有预期的。我还希望内部类 B.Foo 也能以同样的方式工作,但实际上并不是这样。
我该如何让 B.Foo 从类 A 继承 alice 这个属性呢?我需要内部子类 Foo 在 B 中同时拥有 alice 和 bob 这两个属性。
谢谢。
>>> class A:
... yay = True
... class Foo:
... alice = True
...
>>> class B(A):
... nay = False
... class Foo:
... bob = False
>>> B.yay
True
>>> B.Foo.alice
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class Foo has no attribute 'alice'
相关问题:
3 个回答
1
Foo 是它自己的一个类。它并没有从 A 这个类继承。因此,Foo 并没有 A 类的任何属性。即使 Foo 被放在 A 的一个子类里面,这也不会改变什么。
9
继承是针对每个类来说的。在你的代码中,类 B 是从类 A 继承而来的,但仅仅因为它们都有内部类 Foo,并不能说明它们之间的继承关系。
如果你想让 B.Foo 拥有 A.Foo 的属性,你需要让 B.Foo 继承自 A.Foo:
class B(A):
class Foo(A.Foo):
bob = False
19
你看到的错误是因为类 A 的 Foo 属性和类 B 的 Foo 属性之间没有联系。
在类 B 中,Foo 属性的值是一个类对象,这个值完全覆盖了从 A 继承来的 Foo 属性的值。
这样做应该能解决问题:
class B(A):
nay = False
class Foo(A.Foo):
bob = False
一般来说,至少对我来说,把类的内容想象成一系列带有特定值的属性会比较有帮助。
以类 B 为例,我们有:
yay属性,它的值是从A继承来的True。nay属性,它的值是False。Foo属性,它的值是一个类对象。
类的方法也是属性,它们的值是可以调用的对象。