2012-04-07 8 views
1

これがベストプラクティスであるPythonのクラスとコレクション

がそうのように、私は、クラスオブジェクトを持っている、としましょう質問:

class ClassOfObjects: 
    def __init__(self, name): 
     self.name = name 
    ... 

が、私は、これらのオブジェクトの3

a = ClassOfObjects('one') 
b = ClassOfObjects('two') 
c = ClassOfObjects('three') 
をインスタンス化し、言うことができます

今、私のオブジェクトのリストを作成したいと思います。 1つの明白な方法は、リストオブジェクトを作成することです。

ListOfObjects = [a,b,c] 

このような制限があります。特に私が検索しようとすると、特定のオブジェクトを持つオブジェクトを見つける。誰でもベストプラクティスを認識していますか?

+0

問題が検索されている場合は、辞書を使用してそれらを格納してください。 – joaquin

答えて

7

あなたはそれが作成されます場合に、各インスタンスはクラスで自分自身を登録することができます。そして、

class K(object): 
    registry = {} 
    def __init__(self, name): 
     self.name = name 
     self.registry[name] = self 

K.registryは、キーとしての名前で、あなたが作成したすべてのインスタンスの辞書です。変数をインスタンスに割り当てる必要はありません。レジストリからアクセスできるからです。また、インスタンスを簡単に反復処理することもできます。

ユースケースに関する詳細情報を共有している場合は、誰かがより良い選択肢を提供できる可能性があります。

+0

も ​​'set'を使用することを検討してください。あなたの要件と平等/複製のセマンティクスに応じて、これはより正確になります –

+1

@kindall 5行目で 'K.registry [name] = self'を実行するのは重要ですか?そんなことをやるべきだと思ったから?私はクラスに言及しなかったので「盗んだ」という質問があります。私は「自己」に言及しました。 – George

+1

インスタンスの属性 'registry'に*を割り当てるのではなく、' self'や 'K'(またはより良いのは' type(self) ')を変更するだけで同じものになるのと同じ方法ですdict。 – kindall

関連する問題