我是一个完整的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:未定义名称'output'。我读过这是因为全局变量只在模块中定义。如何在脚本中正确访问输出变量?
答案 0 :(得分: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 :(得分:1)
哎哟。面向对象编程发生的全部原因是避免使用全局变量。让它们成为实例变量,以便在类中的任何位置访问它们。
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']
答案 2 :(得分:0)
也许class attribute更适合你?
class Commandline_Reader:
output = []
def run(self):
# do stuff
a = 'somevariable'
self.output.append(a)
答案 3 :(得分:-1)
只需从run()方法
返回值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