簡體   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