Python中的继承和内部类?

Pao*_*olo 18 python oop inheritance class inner-classes

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

如何从类B.Foo继承alice属性A?我需要的是内部子类FooB有两个属性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'
Run Code Online (Sandbox Code Playgroud)

Pav*_*pin 14

为什么原因B.Foo.alice给你一个错误是因为有没有关系的Foo类的属性AFoo阶级属性B.

B,属性中Foo有一个类对象值,它完全取代了继承自的类对象值A.

这应该解决它:

class B(A):
    nay = False
    class Foo(A.Foo):
        bob = False
Run Code Online (Sandbox Code Playgroud)

一般来说,至少在我看来,它有助于将类体内容视为具有某些赋值的属性序列.

在课堂上B,我们有:

  1. yay具有True从A继承的值的属性
  2. nay具有价值的属性False.
  3. Foo 具有类对象的属性.

类方法也是具有可调用对象作为值的属性.


paj*_*ton 8

继承是每类的事情.在你的代码类中B继承自类A,但仅仅因为它们都有内部类Foo并没有告诉我们它们的继承.

如果你想B.Foo拥有属性A.Foo,你需要B.Foo继承A.Foo:

class B(A):
    class Foo(A.Foo):
        bob = False
Run Code Online (Sandbox Code Playgroud)