gpt4 book ai didi

python - 什么时候使用 __call__ 是个好主意?

转载 作者:太空狗 更新时间:2023-10-29 16:54:55 24 4
gpt4 key购买 nike

人们对使用 __call__ 有何看法。我很少看到它被使用,但我认为当你知道一个类将用于某些默认行为时,它是一个非常方便的工具。

最佳答案

我认为你的直觉是对的。

从历史上看,可调用对象(或者我有时听说过的“仿函数”)已在 OO 世界中用于模拟闭包。在 C++ 中,它们通常是不可或缺的。

然而,__call__ 在 Python 世界中的竞争相当激烈:

  • 一个常规的命名方法,它的行为有时可以更容易地从名称中推断出来。可以转换为绑定(bind)方法,可以像函数一样调用。
  • 闭包,通过返回嵌套 block 中定义的函数获得。
  • 一个 lambda,这是一种有限但快速的闭包方法。
  • 生成器和协程,它们的主体像仿函数一样保持累积状态。

我想说的是,使用 __call__ 的时间是当您无法通过上述选项之一获得更好的服务时。请检查以下标准:

  • 你的对象有状态。
  • 你的类(class)有一个明确的“主要”行为,这个名字有点愚蠢。例如。如果你发现自己在编写 run()doStuff()go() 或曾经流行且永远冗余的 doRun (),你可能有一个候选人。
  • 您的对象的状态超出了生成器函数的预期。
  • 您的对象包装、模拟或抽象函数的概念。
  • 您的对象还有其他在概念上属于您的主要行为的辅助方法。

我喜欢的一个例子是 UI 命令对象。设计为它们的主要任务是执行命令,但有额外的方法来控制它们作为菜单项的显示,例如,在我看来,这似乎是你仍然想要一个可调用对象的那种事情。

关于python - 什么时候使用 __call__ 是个好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3369640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com