Причина, по которой B.Foo.alice
выдал ошибку, заключается в том, что нет никакой связи между атрибутом Foo
класса A
и атрибутом Foo
класса B
.
В B
,Атрибут Foo
имеет значение объекта класса, которое полностью заменяет значение объекта класса, унаследованное от A
.
Это должно исправить это:
class B(A):
nay = False
class Foo(A.Foo):
bob = False
В общем, это помогает, по крайней мере, длямне, чтобы представить содержание тела класса как последовательность атрибутов с определенными присвоенными значениями.
В случае класса B
, у нас есть:
yay
атрибут, которыйимеет значение True
, унаследованное от атрибута A. nay
, значение False
. Foo
, атрибут объекта класса.
Методы класса также являются атрибутами, которые имеют в качестве значений вызываемые объекты.