Доступ к атрибуту базового класса в производном классе - в «области видимости»
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
-подобный синтаксис (или взломать), или объяснение, какЗачем это не там