Firefox 云计算 apache mysql Python Ubuntu php wordpress shell linux 开源 程序员 centos 编程 微软 nginx java google Android Windows

Python的神奇方法指南:可调用对象

正如你可能已经知道,在 Python 中函数是第一类对象。 这就意味着它们可以被传递到函数和方法,就像是任何类型的对象。 这真是一种难以置信强大的特性。

这是 Python 中一个特别的神奇方法,它允许你的类实例像函数。 所以你可以“调用”它们,把他们当做参数传递给函数等等。 这是另一个强大又便利的特性让 Python 的编程变得更可爱了。

__call__(self, [args...])

允许类实例像函数一样被调用。 本质上,这意味着 x() 等价于 x.__call__()。 注意,__call__ 需要的参数数目是可变的,也就是说可以对任何函数按你的喜好定义参数的数目定义 __call__

__call__ 可能对于那些经常改变状态的实例来说是极其有用的。 “调用”实例是一种顺应直觉且优雅的方式来改变对象的状态。 下面一个例子是一个类表示一个实体在一个平面上的位置:

class Entity:
    '''描述实体的类,被调用的时候更新实体的位置'''

    def __init__(self, size, x, y):
        self.x, self.y = x, y
        self.size = size

    def __call__(self, x, y):
        '''改变实体的位置'''
        self.x, self.y = x, y

    #省略...

延伸阅读

评论