如何从另一个模块的类中访问变量

时间:2014-01-15 10:33:33

标签: python class global

我是一个完整的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'。我读过这是因为全局变量只在模块中定义。如何在脚本中正确访问输出变量?

4 个答案:

答案 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