모든 명명 된 매개 변수가 메서드에 전달되었는지 확인해야합니다 (기본값은 필요 없습니다). 다음을 수행하는 것이 가장 좋은 방법입니까?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)
는 휴의 대답 (즉, 단지 이름을 사용하십시오 위치 인수가) 당신의 최선의 방법이다.
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)
그냥 인터프리터가 알아서 할 수 있지만 : 파이썬 2.x를 들어
class X(object):
def func(self, arg1, arg2, arg3):
pass
+1 .. 네, 문제. 내가 어떻게 그걸 몰랐는지 모르겠다. .. – max
당신이 다른 인수를 허용 하시겠습니까 다음과 같이
파이썬 3.x를 들어, 당신은 또한 의 옵션은는 (오히려 단지를 허용하는 것보다) 키워드 인자의 사용을 필요로 했는가? 그렇지 않은 경우 :
class X(object):
def func(self, arg1, arg2, arg3):
pass
예 경우 : 파이썬의 모든 버전의
class X(object):
def func(self, arg1, arg2, arg3, **kwargs):
pass
.
발생시키는 예외가 TypeError의 서브 클래스인지 확인하십시오. 당신이 이것을 원한다면 왜 kwargs를 사용하고 있습니까? 변수를 정상적으로 지정하십시오. –
잘못되었거나 잘못되었습니다. 'def func (self, arg1, arg2, arg3)'를 사용하십시오. –
@S Lott 당신이 제안한 것을 사용 하겠지만, 그 다음에는 논쟁의 순서대로 실수를 저 지르겠습니다. @Glenn Maynard 순서대로 실수를 피하기 위해 명명 된 매개 변수를 사용하고있었습니다 (많은 함수에서 3-6 개의 인수가 있음). 안좋다? – max