2014-08-29 144 views
0

我正在学习Python,并且我没有得到我所做的与我的变量有关的错误以及是否在函数中访问它们。当使用全局变量时未定义全局名称

我已经重新创建我的PythonFiddle脚本的总体布局,我得到了同样的错误

global trigger 

class test(object): 
    def init(self): 
     trigger = 'hi' 
     self.step2() 

    def step2(self): 
     print '%s' % trigger 

if __name__ == "__main__": 
    tester = test() 
    tester.init()` 

人有什么想法?

+0

请学会不要使用'global'。这就是参数和返回值。 – Matthias 2014-08-29 05:24:31

回答

2

您需要在您分配给它的每个函数中将该变量标记为全局变量。将global trigger放入您的init方法中。

请注意,这样做的事情可能不是一个好主意。如果要将其数据存储在全局变量中,那么定义一个类没什么意义。一种替代方案是:

class test(object): 
    def init(self): 
     self.trigger = 'hi' 
     self.step2() 

    def step2(self): 
     print '%s' % self.trigger 

if __name__ == "__main__": 
    tester = test() 
    tester.init() 
+0

我应该将它作为参数传递给函数呃?上面的例子对它进行调整是否合适? – DeucePie 2014-08-29 04:09:05

+0

@DeucePie:我编辑了我的答案以添加示例。一种方法是将该值存储为对象的属性。 – BrenBarn 2014-08-29 04:10:42

+0

谢谢,这有帮助,但我遇到了另一个错误,与另一个函数中的变量一起使用,但用于形成一些JSON。如果我把它{{文件名':触发}我得到全球名称没有定义或如果我把它{{文件名':self.trigger}它说TypeError:是不是JSON可序列化 – DeucePie 2014-08-29 04:45:40