请参阅函数stop from locking在Python中定义的类

请参阅函数stop from locking在Python中定义的类,python,Python,我想在函数中定义一个类(用于测试目的)并将一个值放入 函数变量: def foo(): myvar = None class myclass: def run(self): myvar = 5 mm = myclass() mm.run() print(myvar) 以上打印内容None 除了global之外,是否有其他方法可以从类中访问myvar变量?正确的答案将打印5如果没有全局,则无法为当前范围之外的变量赋

我想在函数中定义一个类(用于测试目的)并将一个值放入 函数变量:

def foo():
    myvar = None
    class myclass:
        def run(self):
            myvar = 5

    mm = myclass()
    mm.run()
    print(myvar)
以上打印内容
None


除了
global
之外,是否有其他方法可以从类中访问
myvar
变量?正确的答案将打印
5

如果没有
全局
,则无法为当前范围之外的变量赋值。如果需要在类中持久化该值,则可以定义类变量。例如:

def foo():
    class Class:
        var_to_change = None
        def run (self):
            self.var_to_change = 5
    print (Class.var_to_change)
    instance = Class()
    instance.run()
    print (Class.var_to_change)

我还没有测试过上面的代码,但它在理论上应该可以工作。

没有,这样做不是一个好的实践。在分配之前,不要尝试复杂的操作添加
非本地myvar
内部
def run
。为什么要这样做?这违背了类的全部目的,即封装状态。如上所述,您可以使用
非局部myvar
,这使得它分配给最近的封闭范围,在本例中是函数的局部范围。更合理地说,您应该让
运行
函数返回
myvar
的值,然后在caller@juanpa.arrivillaga这不是一个有用的答案。请先回答问题,然后提供您的意见。这也将打印
None
。另外,在本例中,可以使用
非本地
。我不知道有类似
非本地
的东西。哇!