私は、引数の任意のセットをとり、引数の型に基づいてそれらを処理する正しい関数を選択する関数を持っています。Pythonのパラメータ型に基づいて関数を選択する
私の現在のアプローチは、引数の型をチェックし、引数を受け入れるまですべての関数を反復処理するすべての処理関数でデコレータを使用しています。
これについて何か私にはちょっとハックしたようですが、比較的新しいPythonプログラマとして、これを行うためにもっと「pythonic」メソッドがあるのだろうかと思っていました。
def accepts(*types) :
def my_decorator(func):
def wrapped(*args, **kwargs):
for i in range(len(types)):
if not isinstance(args[i], types[i]):
raise TypeError('Type error, %s not instance of %s, it is %s' %(args[i],types[i], type(args[i])))
return func(*args, **kwargs)
return wrapped
return my_decorator
EDIT:このようなデコレータを持っているでしょう '機能' で
def function_router(*args):
for func in functions: #functions is a list of functions
try:
return func(*args)
except TypeError:
pass
#probably raise an exception if no function works
と各機能:
ので、現在、私はこのような何かを持っている男ああ、私は実際本当にすべてのソリューションを読んで好きだった。私が選んだ答えは、私が現在行っていることに対して最も効果的でしたが、すべての答えから何かを学んだので、あなたのすべての時間に感謝します。
あなたはデコレータを使用している方法のいくつかの実例を与えてもらえますか? – NPE