【发布时间】:2014-01-07 14:36:05
【问题描述】:
我有一个装饰器方法来检查传递给函数的参数类型。
def accepts(*types):
def check_accepts(f):
assert len(types) == f.func_code.co_argcount
def new_f(*args, **kwds):
for (a, t) in zip(args, types):
assert isinstance(a, t), \
"arg %r does not match %s" % (a,t)
return f(*args, **kwds)
new_f.func_name = f.func_name
return new_f
return check_accepts
现在,在一个类中(classA.py),我想要一个只接受同一个类的参数的方法:
class ClassA:
@accepts(WHATTOPUTHERE)
def doSomething(otherObject):
# Do something
在其他类中,我可以将ClassA 代替WHATTOPUTHERE,但在classA.py 中,ClassA 是未知的。如何将当前类传递给@accepts() 函数?
【问题讨论】:
-
对不起,我不知道你的意思。那不是我的意图,不。你能解释一下为什么会这样吗?
-
嗯,想想,这里不会发生的;您已经重新实现了与 Python 2 中已经方法相同的类型检查;强制
self为同一类型或当前类的子类。但似乎你没有考虑到args[0]在这里是self。
标签: python types decorator typechecking python-decorators