我将要编写一个函数decorator,它接受一个参数并返回一个decorator,这个decorator可以用来控制单参数函数的参数类型。我希望在传递的参数的类型错误的情况下会发生提升错误。你知道吗
def typecontrol(num_type):
def wrapper_function(num):
if isinstance(num, num_type):
return num
else:
raise TypeError
return wrapper_function
@typecontrol(float)
def myfunc(num):
print(num)
例如,myfunc(9.123)
应该打印9.123,myfunc(9)
应该引发一个错误。但它总是引发类型错误。你知道吗
typecontrol
将是一个函数,返回修饰符,而不是修饰符本身。您需要一个额外的嵌套函数:如果typecheck通过,包装函数将负责调用包装函数,而不是返回typechecked参数。你知道吗
在编写的代码中,
num
实际上是您要修饰的函数,因此您要检查函数是否是(在本例中)的实例float
。你知道吗一些例子:
正如其他人所评论的那样,在here中可以找到关于编写带参数的装饰器的一个很好的解释。你知道吗
但是,似乎您想要强制类型(我以前在Python中也遇到过类似的麻烦),因此根据您的用例,我可能会推荐两个选项:
pydantic
包。它允许您创建“类似结构”的对象(类似于NamedTuple
或dataclass
),这些对象将强制执行运行时类型检查,并在运行时使用python3.6+类型提示适当地强制输入。文档和一些有用的例子可以在here中找到。你知道吗根据您的用例,我希望这两个都能有所帮助!你知道吗
相关问题 更多 >
编程相关推荐