繁体   English   中英

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

[英]How to access a variable from a class of another module

我是一名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成为实例属性:

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

哎哟。 进行面向对象编程的全部原因是为了避免使用全局变量。 使它们成为实例变量以在类中的任何位置访问它们。

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']

也许class属性更适合您?

class Commandline_Reader:

    output = []

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

只需从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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM