我知道类中的 __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/