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
Moving _var в Outer
не помогает - перемещение его в рамках модуля будет работать, но побеждает цель наличия классов. Итак, как это сделать?доступа атрибут базового класса в производном классе - в «области видимости класса»
EDIT: переход от Java, поэтому правила определения классов являются для меня головным скребком - будет оценен брифинг. Это работает кстати:
class Derived(InnerBase): pass
Derived._var = InnerBase._var | {'baz'}
но это не вершина элегантности.
Связанные: Nested classes' scope? - но здесь мы специально хотим получить доступ к нашему родительскому классу (а не внешний типа)
EDIT2: То, что я на самом деле после того, как это _var = __class__._var
-кака синтаксиса (или взломать), или объяснение как почему его там нет
Отключить тему - я хочу получить к ней доступ в классе - не один раз при инициализации –
Я не нахожу это настолько вне темы, вы всегда можете использовать staticmethod или classmethod. – pacholik
Статический и классный метод будет дуть одинаково - не принимайте его лично, в этом сообществе принято удалять свой ответ, если он не совсем работает;) –