2016-01-05 42 views
-1

似乎這是我想出如何才能夠從類中只取出變量的唯一方法 - def在不同的類中,而不需要在類中打印所有打印和函數,我想從中調用變量。我是對的還是有另一種更簡單的方法?我是否必須聲明變量爲全局變量才能在類之外使用它們?

class MessageType: 
    def process_msg1(self,data) 
     item1 = [] 
     item2 = [] 
     item3 = [] 

     item1.append(float(stuff)*stuff) 
     item2.append(float(stuff)*stuff) 
     item2.append(float(stuff)*stuff) 
     print('printing and plotting stuff') 

     return(array(item1), array(item2), array(item3)) 

class PrintMSG(MessageType): 
    def process_msg1(self, data): 
     (i1, i2, i3) = messagetype.process_msg1(data) 
     print('printing plus plotting using variables from class Message') 

#processing piece 
keep_asking = True 
while keep_asking: 
    command_type = input("What message type do you want to look at?") 
    if command_type == 'msg type1': 
     msg = MessageType() 
     print_msg = PrintMSG() 
     messagetype.process_msg1(self,data) 
     print_msg.process_msg1(data) 
    elif: 
     print('other stuff') 
    wannalook = input('Want to look at another message or no?') 
    if not wannalook.startswith('y'): 
     keep_asking = False 

我遇到的問題是我有一個項目,我需要從其他類中的其他類中調用變量。我有幾個其他類與全局變量,但我的問題是(i1, i2, i3) = messagetype.process_msg1(data)再次運行整個類-def而不是隻調用數組變量。如果在#processing piece我已經調用該類-def,有沒有辦法調用它們?

參考之前的問題發表here

+0

我不知道你想問什麼。代碼示例會有所幫助。你爲什麼試圖首先從班上「拔出」某些東西? – deceze

+0

請點擊我的問題中給出的鏈接...示例代碼在那裏..我試圖使用一個類中的變量,這些變量具有我在其他類中需要的計算。 – Daniel

+0

這裏有很多東西,它完全不明確你所指的是什麼。用一個不言自明的代碼示例更新您的問題,***請致電*** – deceze

回答

3

類應該是代碼和數據的自包含單元。有幾個具有多個全局變量的類表明你幾乎可以肯定做錯了什麼。

應該長於單個方法調用

類數據,是否在內部以後使用或暴露於其它的代碼,應保存到self。所以,你的item1item2item3應在__init__方法初始化,然後process_msg1應該沒有初始化他們更新它們。事情是這樣的:

class MessageType: 

    def __init__(self): 
     self.item1 = [] 
     self.item2 = [] 
     self.item3 = [] 

    def process_msg1(self, data) 
     self.item1.append(float(stuff) * stuff) 
     self.item2.append(float(stuff) * stuff) 
     self.item2.append(float(stuff) * stuff) 
     print('printing and plotting stuff') 
     return(array(self.item1), array(self.item2), array(self.item3)) 

然後,一旦你已經創建了一個實例(message_type = MessageType())並稱爲process_msg1方法(message_type.process_msg1(1.0, 2.3, 3.14159))其他代碼可以訪問它作爲message_type.item1等)。

+0

'東西'實際上來自csv文件中的字段。我嘗試使用messagetype.item1,但後來被告知item1沒有定義。 – Daniel

+0

'item1'沒有被定義,因爲你沒有用'self.'作爲前綴 - 這意味着它是一個局部變量,只要'MessageType.process_msg1'方法執行完畢就被銷燬。 –