0

おそらく(通常は)私が試していることを行うためのより良い方法がありますが、私は現在、次のようなオブジェクトのリストを作成しています:

my_list = [MyObject(d**) for d in db.myobjects.find({...})]

これは、データベースクエリによって返されたディクショナリオブジェクトを「MyObjects」に変換し、一連のクラスメソッドとプロパティを追加するため、非常に効果的です。

クラス名が実行時に動的に挿入される場合、どうすれば同じことができますか?を使用して動的にクラスを作成できますがeval()、ディクショナリオブジェクトを挿入するにはどうすればよいですか?

my_list = [eval('FooObject') for d in db.fooobjects.find({...})]  # needs kwargs from dicts

どんな助けでも素晴らしいでしょう。

4

1 に答える 1

1

まず、特にクラス文字列がユーザー入力からのものである場合は、のglobals()代わりに使用することを検討してください。eval()

あなたの実際の質問に対して、それはまったく同じように機能します-eval('FooClass')またはあなたにクラス自体globals()['FooClass']を与えます、それはそれをインスタンス化しません。つまり、事前に名前を知っている場合と同じように、呼び出すことでインスタンス化できます。

globals()['FooClass'](**d)
于 2012-08-13T03:45:44.377 に答える