모듈의 각 함수에 대한 인수 유형을 확인하려고합니다 (inspect 모듈을 사용하지 않고). 내가 해낸 가장 쉬운 해결책은 각 기능을 개별적으로 검사하는 것입니다.단일 인터페이스를 사용하여 여러 함수에 대한 인수 유형 유효성 검사 (inspect 사용하지 않음)
def func1(num1, num2): # the two params must be integers
if isinstance(num1, int) and isinstance(num2, int):
# ...function code...
pass
else:
return
def func2(float1): # The only param must be float
if isinstance(float1, float):
# ...function code...
pass
else:
return
def func3(str1): # string
if isinstance(str1, str):
# ...function code...
print 'fdfd'
pass
else:
return
# and, so on ...
그러나 각 기능에 대해 모듈 수준에서 수행하고 싶지 않습니다. 각 함수는 다른 인수를 가질 수 있습니다. 이것은 함수 오버로딩이 아닙니다. 데코레이터 나 메타 클래스를 쓰려고 생각 중이었습니다. 여기에 내가 두 접근 방법에 직면하고있는 문제입니다 : -
- 를 모든 기능에 대한 일반적인 장식을 사용 :이 방법
는, 정말 폐기, 각 함수 내에서 정의 된 실제 변수에 액세스 할 수 없습니다입니다 이 아이디어. 여기 폐쇄 (장식으로 사용되는) 내가 쓸 계획이라고 있습니다 :
def dec(funcName): def typeChecker(): i = __import__(__name__) for m in map(lambda x: i.__getattribute__(x), dir(i)): if '__call__' in dir(m): #Identifying a real function or callable which can be treated as function ## Now, that the function is identified, what should I do here to type-check the arguments?? return typeChecker
내가이 일을 할 수있는 방법에 관해서는 여기에 몇 가지 통찰력을 제공하십시오.
기능
그때, 인수가 다음 메타 클래스를 사용하여 함수로 전송되는 액세스 인수의 각을 검증하고, 할 수 있다면 난 그냥 궁금 해서요 을 만들기위한 메타 클래스를 2.Using, 새로운 클래스를 반환하는 함수 객체를 생성 할 책임이 있습니다. 그러나 그것을하는 방법을 모른다. 이 문제를 해결하는 좋은 방법입니까?
1 아주 좋은 제안 Martijn Peters가주었습니다 - 특수 효과를 사용하려면. 파이썬 2.7에서 우리가 사용할 수있는 것이 있습니까?
내가 장식 맞아야 인수를 이해 해달라고. 데코 레이팅 된 함수의 인수에는 액세스 할 수 있지만 내부 변수에는 액세스 할 수 없습니다. 그럼, 뭐라구? 함수의 인수 또는 지역 변수? –
예. 맞습니다. 나는 처음에는 내적인 주장에 접근 할 수 있다고 생각했다. 그러나 나는 틀 렸습니다. 그래서, 나는 곧 내 초점을 메타 클래스로 옮겼다. – GodMan
나는 메타 클래스로하지 않을 것이다. "마법"을 피하십시오. 의존성 주입을 고려 했습니까? –