すべての名前付きパラメータがメソッドに渡されていることを確認する必要があります(デフォルトは不要です)。それを実行するには、以下の方法が最善の方法ですか?python:関数パラメータの検証
class X:
def func(self, **kwargs):
if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'):
raise ArgException(kwargs)
すべての名前付きパラメータがメソッドに渡されていることを確認する必要があります(デフォルトは不要です)。それを実行するには、以下の方法が最善の方法ですか?python:関数パラメータの検証
class X:
def func(self, **kwargs):
if set(kwargs.keys() != ('arg1', 'arg2', 'arg3'):
raise ArgException(kwargs)
を、ヒューの答えは(すなわち、単に名前の位置引数を使用します)あなたの最善の策です。 Python 3.xのために、あなたも(むしろ単にそれを許すより)キーワード引数の使用を必要とのオプションを持って
は次のとおりです。
class X(object):
def func(self, *, arg1, arg2, arg3):
pass
+1: '*'強制的なキーワード引数について知りませんでした。 – max
class X(object):
def func(self, **kwargs):
required = set(['arg1','arg2','arg3'])
if not set(kwargs.keys()).issuperset(required):
raise ArgException(kwargs)
あなただけのインタプリタがそれの世話を聞かせができるが:Pythonの2.xのために
class X(object):
def func(self, arg1, arg2, arg3):
pass
+1 ..はい、私のコメントを参照してください質問。どのように私がそれを知らなかったのか分かりません。 – max
あなたは他の引数を許可しますか?そうでない場合:
class X(object):
def func(self, arg1, arg2, arg3):
pass
はい:Pythonのすべてのバージョンのためだ
class X(object):
def func(self, arg1, arg2, arg3, **kwargs):
pass
。
発生している例外がTypeErrorのサブクラスであることを確認してください。なぜあなたはこれをやりたいのですか?変数を普通に指定するだけです。 –
悪い、悪いデザイン。 'def func(self、arg1、arg2、arg3)'を使ってください。 –
@S Lott私はあなたの提案を使用しますが、引き続き議論の順番で間違いを犯します。 @Glenn Maynard私は順序のミスを避けるために名前付きのパラメータを使用していました(私は多くの関数で3〜6引数を持っています)。良くない? – max