gpt4 book ai didi

Python __call__ 特殊方法实战示例

转载 作者:IT老高 更新时间:2023-10-28 12:25:29 28 4
gpt4 key购买 nike

我知道类中的 __call__ 方法是在调用类的实例时触发的。但是,我不知道什么时候可以使用这种特殊方法,因为可以简单地创建一个新方法并执行在 __call__ 方法中完成的相同操作,而不是调用实例,您可以调用该方法.

如果有人给我这个特殊方法的实际用法,我将不胜感激。

最佳答案

本示例使用 memoization ,基本上将值存储在表中(在本例中为字典),以便您以后查找它们而不是重新计算它们。

这里我们使用带有 __call__ 方法的简单类来计算阶乘(通过 callable object ),而不是包含静态变量的阶乘函数(因为这在 Python 中是不可能的)。

class Factorial:
def __init__(self):
self.cache = {}
def __call__(self, n):
if n not in self.cache:
if n == 0:
self.cache[n] = 1
else:
self.cache[n] = n * self.__call__(n-1)
return self.cache[n]

fact = Factorial()

现在你有了一个可调用的 fact 对象,就像所有其他函数一样。例如

for i in xrange(10):                                                             
print("{}! = {}".format(i, fact(i)))

# output
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880

而且它也是有状态的。

关于Python __call__ 特殊方法实战示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5824881/

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