例:
class A:
a = 1
class B(A):
b = 2
y = b # works fine
x = a # NameError: name 'a' is not defined
x = A.a # works fine
z = B()
z.a # works fine
B.a # works fine
なぜx = a
許可されないのですか?他のすべてのコンテキスト (インスタンスを介したアクセス、サブクラス名を介したアクセス) では正常に動作します。しかし、どういうわけかクラス自体の中で、それは機能しません。
そして、この動作を考えると、各クラスがいくつかの追加属性を定義するクラス階層を実装できないようです-階層内のどこに定義されているかを正確に知らなければ、サブクラスでそれらにアクセスできないためです。
これが私が(失敗して)やろうとしていたことです:
class X:
accelerate = compose(f1, f2, f3) # f1, f2, f3 are functions
class Y(X):
move = compose(f4, f5)
stop = f6
class Z(Y):
action = compose(accelerate, stop)
class U(Y):
action = compose(move, stop)
これらのクラスはまったく初期化されていません。それらを使用して関数の階層を作成したかっただけです。