pyt*_*der 16 python python-decorators
我正在努力学习装饰器.我理解它的概念,现在试图实现它.
这是我写
的代码代码是不言自明的.它只是检查参数是否传入int.
def wrapper(func):
def inner():
if issubclass(x,int): pass
else: return 'invalid values'
return inner()
@wrapper
def add(x,y):
return x+y
print add('a',2)
Run Code Online (Sandbox Code Playgroud)
这是错误的说法global name 'x' is not defined.我明白它没有定义inner,但不知道如何纠正这个代码?我哪里错了?
slo*_*oth 23
你的装饰者应该是这样的:
def wrapper(func):
def inner(x, y): # inner function needs parameters
if issubclass(type(x), int): # maybe you looked for isinstance?
return func(x, y) # call the wrapped function
else:
return 'invalid values'
return inner # return the inner function (don't call it)
Run Code Online (Sandbox Code Playgroud)
一些要点:
issubclass 期望一个类作为第一个参数(你可以用一个简单的try/except TypeError替换它).你可以在这里找到装饰器的好解释.