これは動作しません:のpython:ネストされたクラス:アクセス外側のクラスのクラスメンバー
class A:
a1 = 4
class B:
b1 = A.a1 # Fails
b2 = 6
class C:
c1 = A.B.b2 # Fails
それを解決するために、任意の非暗号のような方法はありますか?私はAからBとCを取ることができることを知っていますが、私はそれらを埋め込んでおきたいと思います。また、クラスメンバーがいない方が、コンストラクターの引数としてネストされたクラスに簡単に渡すことができるようになると簡単だと思いますが、クラスメンバーの皆さんはここで何か似たようなことをする方法がわかりません。私はまた、この使用法はクラスを名前空間として使用することを覚えていますが、クラスではなくモジュールを使用して解決する必要があるスレッドを読みましたが、クラスの上にクラスデータがある私の共有クラスその中で。
UPDATE:私はクラスメンバーを共有するための本当に汚い方法を見つけ、私はまだ満足していない:
global_tal = None
global_tal2 = None
class A:
a1 = 4
global global_tal
global_tal = a1
class B:
global global_tal
b0 = global_tal # it works
# Desired way: b1 = A.a1 # Fails
b2 = 6
global global_tal2
global_tal2 = B
class C:
global global_tal2
c1 = global_tal2.b2 # it works
# Desired way: c1 = A.B.b2 # Fails
pass
はUPDATE 2:きれいな方法(私見)。 dhkeに感謝します。
class _SharedReferences:
ref1 = None
ref2 = None
class A(_SharedReferences):
a1 = 4
_SharedReferences.ref1 = a1
class B:
b0 = _SharedReferences.ref1 # it works
# Desired way: b1 = A.a1 # Fails
b2 = 6
_SharedReferences.ref1 = B
class C:
c1 = _SharedReferences.ref1.b2 # it works
# Desired way: c1 = A.B.b2 # Fails
pass
"簡単な"方法は、A、B、およびCのすべてが継承するパラメータクラスです。 – dhke
あなたの言うことをよく分かりません。上に別のレベルの継承を追加する? – user2761220
以下を参照してください。基本的に 'A(Param)'と 'B(Param)'を持っているか、パラメータに別の名前が必要な場合は 'A'ではなく' Param'からクラス変数を引きます。 – dhke