在以下代码类B
中继承了yay
类的A
属性,我预料到了这一点。我也希望内部类B.Foo
的行为方式相同,但事实并非如此。
如何让B.Foo
从类alice
继承A
属性?我需要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'
答案 0 :(得分:13)
B.Foo.alice
给您错误的原因是因为类Foo
的{{1}}属性与类A
的{{1}}属性之间没有关联。< / p>
在Foo
中,属性B
有一个类对象值,可以完全替换从B
继承的类对象值。
这应该解决它:
Foo
一般来说,至少对我来说,将类体内容视为具有特定指定值的属性序列是有帮助的。
如果是课程A
,我们有:
class B(A):
nay = False
class Foo(A.Foo):
bob = False
属性,其值B
继承自A。yay
属性,其值为True
。nay
具有类对象的属性。类方法也是将可调用对象作为值的属性。
答案 1 :(得分:8)
继承是每类的事情。在您的代码类中,B
继承自类A
,但仅仅因为它们都具有内部类Foo
并未告诉我们有关其继承的任何内容。
如果您希望B.Foo
拥有A.Foo
的属性,则需要B.Foo
继承A.Foo
:
class B(A):
class Foo(A.Foo):
bob = False
答案 2 :(得分:1)
Foo
是自己的班级。它不会从A
继承。因此,它没有A
的任何字段。嵌套在A
的子类中的事实不会改变任何内容。