📅  最后修改于: 2023-12-03 15:13:14.250000             🧑  作者: Mango
__call__
在Python中在Python中,__call__
是一个特殊方法,它允许实例对象像函数一样被调用。当我们在一个对象后面加上括号并传递参数时,Python解释器会查找该对象是否具有__call__
方法,如果有,则调用该方法。
__call__
方法让我们看一个简单的示例来演示__call__
的用法:
class Example:
def __call__(self, *args, **kwargs):
print("Calling Example class")
for arg in args:
print(arg)
# 创建Example类的实例对象
example = Example()
# 调用实例对象,就像函数一样
example("Hello", "World")
输出:
Calling Example class
Hello
World
在上面的示例中,我们定义了一个名为Example
的类,并在其中定义了__call__
方法。当我们创建Example
类的实例对象并将其调用时,__call__
方法将被调用。我们可以将参数传递给实例对象并在__call__
方法中使用它们。
下面,让我们看一个更复杂的示例,展示了使用__call__
方法来实现一个可以计算函数平均值的类:
class Average:
def __init__(self):
self.values = []
def __call__(self, *args):
self.values.extend(args)
return sum(self.values) / len(self.values)
# 创建Average类的实例对象
avg = Average()
# 调用实例对象,传递参数来计算平均值
print(avg(10, 20, 30)) # 输出: 20.0
print(avg(40, 50)) # 输出: 30.0
在上述示例中,Average
类的实例对象可被调用。每次调用时,传递的参数会被添加到values
列表中,并返回计算后的平均值。
通过使用__call__
方法,我们可以将一个类的实例对象变成可调用的对象,在一些特定情况下,可以提供更灵活和便捷的编程方式。这为我们在Python中编写更具表达力和可读性的代码提供了更多的选择。