2014-01-15 97 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) 
相關問題