我希望检查模块中每个函数的参数类型(不使用检查模块)。我自己做过的最简单的解决方案是分别在每个函数中实现检查。
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.使用元类创建函数
我只是想知道是否可以使用元类访问发送给函数的参数,然后验证每个参数,然后返回一个全新的类函数对象。但是,不知道该怎么做。这是解决这个问题的好方法吗?
Martijn Peters 给出的 1 个非常好的建议 - 使用注释。Python 2.7 中有什么可以使用的吗?