In the following code class B has inherited yay attribute from class A, I expected this. I\'d also expect that inner class B.Foo
The reason why B.Foo.alice gave you an error is because there's no connection between Foo attribute of class A and Foo attribute of class B.
In B, attribute Foo has a class object value that completely replaces class object value inherited from A.
This should fix it:
class B(A):
nay = False
class Foo(A.Foo):
bob = False
In general, it helps, at least for me, to think of a class body contents as a sequence of attributes with certain assigned values.
In case of class B, we have:
yay attribute that has value True inherited from A.nay attribute that has value False.Foo attribute that has class object.Class methods are also attributes that have callable objects as values.