私は現在、PythonでAPIライブラリを書いているし、次のコードがあまりにもunpythonicある場合、私は思ったんだけど:繰り返しコードを防ぐために、** kwargsとデコレータを使用することは許されますか?
@accepts('video_id', 'reference_id', 'page_size', 'page_number',
'get_item_count', 'fields', 'video_fields', 'custom_fields',
'media_delivery', 'output')
@requires('video_id', 'reference_id')
def find_related_videos(self, **params):
return ItemCollection(read_request(params))
リスト内の任意kwargsからではないが渡された場合accepts
デコレータはエラーをスローします方法。また、特定のキーワードの検証も行います。
requires
デコレータは、それらのキーワード引数が存在することを保証します。
メソッド定義にキーワードargsがないと私に迷惑がかかります。しかし、各メソッドに対して手動でparams辞書を構築する必要もあり、迷惑に見えます。また、メソッドに渡される引数のvideo_fields
のインスタンスごとに同じ検証コードがあります。したがって、自分自身を繰り返さないようにacceptsデコレータから呼び出すことができます。
思考?
私はここにいくつかの味があることを知っていますが、呼び出し側が変数を渡している場合、呼び出し側はその変数が重要であると予想しており、呼び出し側はそれを無視することは予想外です。これは予期せぬ結果につながる可能性があり、それは良いことではありません。私は一般的に、エラーを投げて、プログラマーにパラメータを無視してプログラマーを驚かせるよりも重要なことを見てもらう方が良いと思います。 – TimothyAWiseman