2014-01-15 95 views
0

我是一个总的Python初学者,我有一个变量创建在一个文件commandline_reader.py的类中,我想从另一个脚本访问。我试图通过使变量全局,这不起作用。如何从另一个模块的类访问变量

myscript.py:

from commandline_reader import Commandline_Reader 
    reader = Commandline_Reader('--get_serial_number') 
    reader.run() 

    print output 

commandline_reader.py:

class Commandline_Reader: 
     def __init__(self,argString=''): 
      global output 
      output = [] 

     def run(self): 
      # do stuff 
      a = 'somevariable' 
      output.append(a) 

当我运行myscript.py我总是得到一个NameError:名字 '输出' 没有定义。我读过这是因为全局变量只在模块中定义。如何在脚本中正确访问输出变量?

回答

-1

刚刚从运行返回值()方法

myscript.py:

from commandline_reader import Commandline_Reader 
reader = Commandline_Reader('--get_serial_number') 
output = reader.run() 

print output 

commandline_reader.py:

class Commandline_Reader: 
    def __init__(self,argString=''): 
     self.output = [] 

    def run(self): 
     # do stuff 
     a = 'somevariable' 
     self.output.append(a) 
     return self.output 
+2

你的意思是* self * .output,它现在的样子,output = []在init中什么也不做。另外list.append返回None,所以你不应该返回它。 – RemcoGerlich

+1

您的代码中的输出范围不知道没有实例属性self的init函数。这仍然会返回名称错误。 – jwillis0720

+0

谢谢你指出我。这是一些愚蠢的错误... – Mailerdaimon

1

output实例属性:

class Commandline_Reader: 
    def __init__(self,argString=''): 
     self.output = [] # note use of self here 
    def run(self): 
     # do stuff 
     a = 'somevariable' 
     self.output.append(a) # and here 

通过实例访问它:

print reader.output 
1

ouch。面向对象编程发生的全部原因是避免使用全局变量。使它们成为实例变量,以便在课程中的任何地方访问它

class Commandline_Reader: 
    def __init__(self,argString=''): 
     self.output = [] 

    def run(self): 
     # do stuff 
     a = 'somevariable' 
     self.output.append(a) #output is now part of the instance Commandline reader and can be accessed anywhere inside the class. 


clr = Commandline_Reader(argstring='--get_serial_number') 
clr.run() 
print clr.output 
>>>['somevariable'] 
+0

那么有很多原因。但我想不出你为什么需要在一个类中使用全局变量。 – jwillis0720

0

也许class attribute更适合您吗?

class Commandline_Reader: 

    output = [] 

    def run(self): 
     # do stuff 
     a = 'somevariable' 
     self.output.append(a) 
相关问题