我需要访问在嵌套函数中设置的变量。我正在从另一个线程读取此变量数据。在不违反范围的情况下获取数据的最佳方法是什么?
这是代码段,
class main(object):
def sub_fun(self):
def inner_fun(self):
self.var = 10
inner_fun(self)
p = main().sub_fun()
现在如何访问var
的{{1}}属性?
答案 0 :(得分:1)
问题是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显示了一个示例。
答案 1 :(得分:1)
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)
如果需要类对象或父函数访问子嵌套函数内部的变量,则应通过返回该变量将其提升到外部作用域。否则,变量的作用域将仅驻留在所谓的子嵌套函数中。