2016-07-30 50 views
0

我對OOP(以及Python的新手)比較陌生,而且我正在嘗試創建在某個文本文件中傳遞時實例化的對象。當這個文本文件被解析並組織成我想要的數據結構(在這種情況下,這是一個字典)時,我還想有另外一個變量存在,用於統計原始文本文件中未被錄入到字典。如何提取在Python中的對象的構造函數中計算的變量?

當對象被實例化時,我可以訪問在對象的構造函數中創建的字典,因爲我使用了getitem方法。但是,我似乎無法訪問我在構造函數中計算的變量。我試圖編寫一個返回變量的新方法,但它不起作用。它只是說我已經「在0x11cfaaf10 < 主要 .ClassName對象的綁定方法ClassName.get_unregistered」返回此

這裏是我當前的階級結構的一個例子:

class ClassName(object): 
    def __init__(self): 
     textfile= 'sometextfileofsequences.txt' 
     self.dict_of_sequences= SeqIO.to_dict(SeqIO.parse(textfile, "fasta")) 
     unregistered_sequences=0 
     for name in self.dict_of_sequences.keys(): 
      #the sequences gets evaluated here. if it matches a certain condition, 
      #then it is included in the dictionary. Or else it is left out. 
      if (self.dict_of_sequences[name])== condition 
       self.dict_of_sequences[name]= sequence 
      else: 
       self.dict_of_sequences.pop(name, None) 
       unregistered_sequences+=1 

    def __getitem__(self, key): 
     return self.dict_of_sequences[key] 

    def get_unregistered(self): 
     return unregistered_sequences 

我的很多編碼經驗已經通過在線資源獲得,所以有很多理論和概念我都沒有完全掌握。我試圖閱讀很多關於編碼中的對象以及它們所涉及的技術,但這個表面上簡單的問題讓我頗費了一番苦頭。

回答

1

1)用class關鍵字定義類,而不是def

2)任何不以self.開頭的變量在實例化過程中被認爲是本地的,並在構造函數完成後超出範圍。將unregistered_sequences的所有實例替換爲self.unregistered_sequences

+0

我試過了,但現在當我實例化對象並運行get_unregistered方法時,它會返回 **未綁定的方法ClassName.get_unregistered **。 你知道爲什麼嗎? –

+0

查看我的更新回答。你應該用'class'來定義一個類,而不是'def'。 –

+0

哎呦,我在課堂和高清之間搞混了。我原來的代碼有正確的術語,我會編輯上面的代碼來反映這一點。 但你知道爲什麼self.unregistered_sequences不會給我一個整數,而是一個未綁定的方法嗎? –

相關問題