如何在Python中更新类方法中的全局变量?

时间:2017-03-28 22:46:48

标签: python python-3.x

class Example(tk.Frame):
    def __init__(self, parent):
        global p
        p = 1.1
        ....

    def looper(self):
        if self.keys['Prior']:
            p = p -.01
            self.draw()

此代码以UnboundLocalError返回:本地变量' p'在分配前引用

我尝试将全局p / p = 1.1放在Class之外的主例程中,我得到了同样的确切错误。在某个地方,我一定是在误解事物。我认为全球意味着贯穿整个计划......这就是我想要的方式......设置一次并让它贯穿整个计划。我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果你从方法中指出它,你可以在课程定义之前定义p(不建议):

p = None

class Example(tk.Frame):
    def __init__(self, parent):
        global p
        p = 1.1

    def looper(self):
        global p
        if ...

# modifying the global
p = 5

但是,请注意每个实例都会对其进行修改,除非您有单例模式或其他用途,否则它不会有意义。相反,您应该将p作为实例变量:

class Example(tk.Frame):
    def __init__(self, parent):
        self.p = 1.1

    def looper(self):
        if self.keys['Prior']:
            self.p = self.p -.01
            self.draw()

# modifying the instance
my_instance = Example(..)
my_instance.p = 5