Access Basisklassenattribut in abgeleiteter Klasse - in "Klassenbereich"
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
Verschieben von _var inOuter
hilft nicht - das Verschieben im Modulbereich würde funktionieren, aber den Zweck von Klassen zunichte machen. Wie geht man damit um?
EDIT: Ich komme aus Java, daher sind die Scoping-Regeln der Klassen für mich ein Kratzer - eine Einweisung wäre wünschenswert. Das funktioniert übrigens:
class Derived(InnerBase): pass
Derived._var = InnerBase._var | {'baz'}
aber es ist nicht der Höhepunkt der Eleganz.
Verbunden: Umfang der verschachtelten Klassen? - aber hier möchten wir speziell auf unsere Elternklasse zugreifen (und nicht auf den äußeren Typ)
EDIT2: Was ich eigentlich nachher bin ist ein_var = __class__._var
-ähnliche Syntax (oder Hack) oder eine Erklärung zuWaru es ist nicht d