Как получить доступ к переменной вложенных функций в Python?
Мне нужно получить доступ к переменной, которая установлена во вложенной функции. Я читаю данные этой переменной из другого потока. Каков наилучший способ получения данных без нарушения области действия?
Вот фрагмент кода,
class main(object):
def sub_fun(self):
def inner_fun(self):
self.var = 10
inner_fun(self)
p = main().sub_fun()
Теперь, как получить доступ к var
атрибут p
?
2 ответа
Проблема в том, что main.sub_fun
возвращается None
, Есть два простых обходных пути:
Просто сохраните ссылку на элемент, который вы создаете перед вызовом метода:
p = main() p.sub_fun() print(p.var)
Это лучший вариант на мой взгляд.
Если вы действительно хотите, чтобы однострочная версия работала, верните
self
отsub_fun
:def sub_fun(self): def inner_fun(): self.var = 10 inner_fun() return self print(main().sub_fun().var)
В любом случае вам не нужно проходить self
в inner_fun
, Он всегда будет смотреть во внешнюю область, когда локальное имя не найдено. #2 показывает пример этого.
class main(object):
def sub_fun(self):
def inner_fun(self):
self.var = 10
p = main()
Вы не можете получить доступ к переменной вложенной функции, потому что она закрыта и доступна только непосредственному родителю. var доступен только для inner_fun. Смотрите ниже для другой реализации.
class main(object):
def outer_function(self):
def inner_function(self):
self.x = 10
return self.x
out = inner_function(self) # Accessing the inner function
return out
p = main()
q = p.outer_function()
print(q)
Если для объекта класса или родительской функции требуется доступ к переменной внутри дочерней вложенной функции, то переменная должна быть перемещена во внешнюю область путем ее возврата. В противном случае область видимости переменной будет находиться только в так называемой дочерней вложенной функции.