class Outer(object):
class InnerBase(object): _var = {'foo', 'bar'}
class Derived(InnerBase):
_var = _var | {'baz'} # NameError: name '_var' is not defined
_var = InnerBase._var | {'baz'} # name 'InnerBase' is not defined
_var = Outer.InnerBase._var | {'baz'} # free variable 'Outer'
# referenced before assignment in enclosing scope
_var を移動しOuter
ても役に立ちません。モジュール スコープ内に移動しても機能しますが、クラスを持つ目的が無効になります。では、どうすればいいのでしょうか?
編集:Javaから来ているので、クラスのスコープルールは私にとって頭の痛い問題です-ブリーフィングをいただければ幸いです。これはうまくいきます:
class Derived(InnerBase): pass
Derived._var = InnerBase._var | {'baz'}
しかし、それはエレガンスの頂点ではありません。
関連:ネストされたクラスのスコープ? - ただし、ここでは (アウター タイプではなく) 特に親クラスにアクセスしたい
EDIT2:私が実際に求めているのは、の_var = __class__._var
ような構文(またはハック)、またはそれが存在しない理由についての説明です