私はよく、同種のオブジェクトのセットを作成していることに気づきます。これは通常、dict または list 辞書に保存します。
a,b,c = MyClass(...), MyClass(...), MyClass(...)
my_set = {'a':a,'b':b,'c':c}
このようなセットでは、共通のニーズは
- オブジェクトのプロパティまたはメソッドから同種のセットを返す
{k:k.prop for k in my_set}
、 また{k:k.func() for k in my_set}
- プロパティまたはオブジェクトのメソッドの出力に基づくフィルタリング
{k:k.prop for k in my_set if k.prop is blah}
、 また{k:k.func() for k in my_set if k.func() is blah}
- 最初の 2 つのニーズをつなぎ合わせる
最初は、これはデータベースを使用する必要があることを示唆しているように見えました。ただし、任意のオブジェクトを要素として使用することによって提供される自由を放棄する必要があります。
このタイプの構造のクラスを作成したいと思います(まだ存在しない場合)。これは、これらのニーズを次のようなもので満たします...
a,b,c = MyClass(...), MyClass(...), MyClass(...)
my_set = {'a':a,'b':b,'c':c}
my_set.prop # fufills first need
my_set.func() # fufills first need
my_set[prop = blah] # fufills second need
my_set[prop= blah].prop.func() # third need
このような機能は存在しますか?それとも、このオブジェクトの必要性は悪い設計の結果ですか?
解決
メソッドをオーバーライドするための@mike-mullerの提案に従って、__getattr__
ここにクラスを作成しました