我有一个decorator声明为类:
class predicated(object):
def __init__(self, fn):
self.fn = fn
self.fpred = lambda *args, **kwargs: True
def predicate(self, predicate):
self.fpred = predicate
return self
def validate(self, *args, **kwargs):
return self.fpred(*args, **kwargs)
def __call__(self, *args, **kwargs):
if not self.validate(*args, **kwargs):
raise PredicateNotMatchedError("predicate was not matched")
return self.fn(*args, **kwargs)
。。。当我使用它来包装类中的方法时,调用该方法似乎不会将对象的实例设置为第一个参数。虽然这种行为并不完全出乎意料,但当方法成为实例方法时,我如何使self
冻结?在
简化示例:
^{pr2}$应为foo的实例,但得到错误消息,说明传递了0个参数。在
找到了-需要定义一个
__get__
方法来创建MethodType
绑定,如下所示:它在调用冻结
self
参数的对象上的方法时创建一个MethodType
对象。在相关问题 更多 >
编程相关推荐