📅  最后修改于: 2023-12-03 15:13:14.255000             🧑  作者: Mango
在Python中,__call__()
是一个特殊方法,它允许我们将对象作为函数呼叫。在本质上,它使对象可调用。
当我们使用类创建一个对象时,我们可以像函数一样调用该对象。这是我展示一个简单的类和对象的例子:
class MyClass:
def __init__(self):
pass
obj = MyClass()
在这个例子中,MyClass
是一个类,我们创建了一个该类的对象obj
。如果我们尝试在对象上调用obj()
,我们会得到一个类型错误,因为对象本质上不是可调用的。但是,我们可以通过将__call__()
方法添加到类中来使该对象可调用:
class MyClass:
def __init__(self):
pass
def __call__(self):
print("Object called.")
obj = MyClass()
obj() # This will print "Object called."
现在,当我们在对象上调用obj()
时,它将执行__call__()
方法。
一个更有用的例子是创建一个可重用的计数器类:
class Counter:
def __init__(self):
self.count = 0
def __call__(self):
self.count += 1
return self.count
counter = Counter()
print(counter()) # Output: 1
print(counter()) # Output: 2
print(counter()) # Output: 3
在此示例中,__call__()
方法将计数器值递增并将其返回。
__call__()
方法也可以以相同的方式接收参数和关键字参数。例如,假设我们要创建一个可接受参数的计数器:
class Counter:
def __init__(self):
self.count = 0
def __call__(self, num):
self.count += num
return self.count
counter = Counter()
print(counter(2)) # Output: 2
print(counter(3)) # Output: 5
print(counter(1)) # Output: 6
在这个例子中,每次调用时,num
参数将添加到计数器中。
通过使用__call__()
方法,我们可以创建可调用对象,这些对象可以带有状态,并且可以在每次调用时更新其状态。