Python 对象特殊方法:(二)对象可调用接口

来源:互联网 发布:每次开机都要修复网络 编辑:程序博客网 时间:2024/05/29 17:27

对象可调用接口

对象通过__call__(self [, *args [, **kwargs]])方法模拟函数行为

如果一个对象提供了__call__()方法即可被调用。下面给几个例子:
例1,

class DistanceFrom(object):    def __init__(self, origin):        self.origin = origin    def __call__(self, x):        return abs(x - self.origin)nums = [1, 32, 23, 210, 213, 45]nums.sort(key=DistanceFrom(10))

这是《参考手册》里的例子,对象DistanceFrom(10)是可调用的单参方法,做为sort的key函数。
例2,

class T(object):    passt = T()T.__call__ = lambda self: "call in T"t() # "call in T"

这个稍微有点意思,T中__call__是非绑定方法,所以有self参数(当然self只是规范,换做this, obj, anything都可以)。可以再上面基础上再做修改

t.__call__ = lambda : "call in t"t() # "call in T"

t.__call__是绑定方法,所有不需要有self参数。执行t()返回“call in T”,没没有得到后定义的 “call in t”,这是因为t.__call__保存的t.__dict__中,而特殊方法的调用不会从对象的dict,而是直接从类中查找。

0 0
原创粉丝点击