2016-07-30 5 views
0

私は比較的新しいOOP(Pythonに加えて)もあり、現在、特定のテキストファイルに渡されたときにインスタンス化されるオブジェクトを作成しようとしています。このテキストファイルは解析され、私の望むデータ構造(この場合は辞書です)に編成されますが、元のテキストファイルのエントリ数をカウントする別の変数もあります。辞書。Pythonでオブジェクトのコンストラクタで計算される変数を抽出するには?

オブジェクトがインスタンス化されると、私はgetitemメソッドを配置するので、オブジェクトのコンストラクタで作成された辞書にアクセスできます。しかし、コンストラクタで計算した変数にはアクセスできないようです。変数を返す新しいメソッドを記述しようとしましたが、機能しません。

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 

私がたくさん:それはここでしか

が私の現在のクラス構造の一例である私は、「0x11cfaaf10で< メイン .ClassNameオブジェクトのバインド方法ClassName.get_unregistered」これを返したことを言いますコーディングの経験はオンラインソースによって得られているので、私が完全に把握していない多くの理論と概念があります。私はコーディングの対象について何かを読むことを試みましたが、どのようなテクニックが必要ですか?この表面的に単純な問題はかなり私を困惑させました。

答えて

1

1)classキーワードではなく、defのクラスを定義します。

2)self.で始まらない変数は、インスタンス化時にローカルと見なされ、コンストラクターの終了後に範囲外になります。 unregistered_sequencesのすべてのインスタンスをself.unregistered_sequencesに置き換えます。

+0

私はそれを試みましたが、オブジェクトをインスタンス化してメソッドget_unregisteredを実行すると、 **バインドされていないメソッドClassName.get_unregistered **が返されます。 理由をご存知ですか? –

+0

私の更新された回答を参照してください。 'class'を使ってクラスを定義してください。' def'では定義しないでください。 –

+0

おっと、私はクラスとデフの間でミックスアップを行いました。私の元のコードには正しい用語があり、これを反映するために上のコードを編集します。 しかし、self.unregistered_sequencesで整数のカウントが返されるのではなく、アンバインドされたメソッドが返される理由は分かりますか? –

関連する問題