我什么时候应该实现__call__

zet*_*ish 16 python

在python中,您可以通过实现该__call__方法使实例可调用.例如

class Blah:
    def __call__(self):
        print "hello"

obj = Blah()
obj()
Run Code Online (Sandbox Code Playgroud)

但我也可以实现自己的方法,比如'run':

class Blah:
    def run(self):
        print "hello"

obj = Blah()
obj.run()
Run Code Online (Sandbox Code Playgroud)

__call__什么时候应该实施?

Bry*_*ley 19

这很难回答.我的观点是,__call__除非你的实际目标是创建一个函数,否则你永远不应该定义.在您创建了传统对象之后,这不是您要做的事情.

换句话说,如果你开始考虑"我要创建一个对象",那么你永远不应该最终实现__call__.另一方面,如果你开始思考"我将创建一个函数......但我希望我可以使用对象框架让我的函数有一些状态"然后你可以创建一个函数作为一个对象状态,并定义__call__使其像一个函数.

我想在@Paul Manta的评论中提供最后一点建议,他写道:

如果您不确定是否需要__call__,那么您不需要__call__

我认为这是合理的建议.