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
属性,它的值是一个类对象。
类的方法也是属性,它们的值是可以调用的对象。