Pythonでは、新しい関数をプログラムで簡単に作成できます。これを現在のスコープでプログラムで決定された名前にどのように割り当てるのですか?
これは私がやりたいことです(動作しないコードで):
obj_types = ('cat', 'dog', 'donkey', 'camel')
for obj_type in obj_types:
'create_'+obj_type = lambda id: id
上記の例では、決定される関数名への の代入はlambda
明らかに機能しません。実際のコードでは、関数自体は関数ファクトリによって作成されます。
バックグラウンドは怠惰であり、繰り返さないことです。私は、生成された関数を割り当てるオブジェクト タイプを 12 以上持っています。したがって、コードは現在次のようになります。
create_cat = make_creator('cat')
# ...
create_camel = make_creator('camel')
関数create_cat
などは、パーサーでハードコーディングされて使用されます。
ドキュメントtypes.new_class()
に見られるように、プログラムでクラスを新しいタイプとして作成すると、解決策のようです。このアプローチを(誤って)使用するのが私の最善の策ですか?