Я пытаюсь понять вложение пространств имен в python 2.7.пространство имен для класса внутри класса в python
Рассмотрим следующий не-рабочий код:
class c(object):
def debug(self):
print globals(),locals()
print x,y
class a(object):
x=7
def __init__(self):
self.y=9
class b(object):
def debug(self):
print globals(),locals()
print x,y
class d(c):
pass
Как получить доступ к переменным х и у, от звонков
a().b().debug()
a.b().debug()
a().d().debug()
a.d().debug()
Ни один из них не кажется, в состоянии видеть ни х, ни у.
EDIT после обсуждения, кажется, что то, что я хочу (избегаю ссылки на глобальные), может быть достигнуто только путем явного расширения информации о вложенных классах. К примеру
class a(object):
#
@classmethod
def _initClass(cls):
for v in dir(cls):
if type(cls.__dict__[v])==type:
setattr(cls.__dict__[v],'vader',cls)
#
x=7
class b(object):
def debug(self):
print b.vader.x
class d(c):
pass
a._initClass()
И даже этот метод не кажется, полезно для получения доступа к переменной экземпляра, как задумано в а(). Д(). Отладочный последовательность.
Если вы считаете, что один из ответов, отправленных в ответ, был достаточно полезен, вы должны принять его в качестве основного ответа, нажав галочку рядом с ним. –
@ Давид хорошо, оба были полезны, но на самом деле убедить меня пойти другим путем и отказаться от классового гнездования. – arivero