Python中的继承和内部类?

时间:2011-04-07 21:04:54

标签: python oop class inheritance inner-classes

在以下代码类B中继承了yay类的A属性,我预料到了这一点。我也希望内部类B.Foo的行为方式相同,但事实并非如此。

如何让B.Foo从类alice继承A属性?我需要Foo中的内部子类B同时具有alicebob属性。

感谢。

>>> 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 个答案:

答案 0 :(得分:13)

B.Foo.alice给您错误的原因是因为类Foo的{​​{1}}属性与类A的{​​{1}}属性之间没有关联。< / p>

Foo中,属性B有一个类对象值,可以完全替换从B继承的类对象值。

这应该解决它:

Foo

一般来说,至少对我来说,将类体内容视为具有特定指定值的属性序列是有帮助的。

如果是课程A,我们有:

  1. class B(A): nay = False class Foo(A.Foo): bob = False 属性,其值B继承自A。
  2. yay属性,其值为True
  3. nay具有类对象的属性。
  4. 类方法也是将可调用对象作为值的属性。

答案 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的子类中的事实不会改变任何内容。