📜  __call__ 在Python中(1)

📅  最后修改于: 2023-12-03 15:13:14.250000             🧑  作者: Mango

__call__ 在Python中

在Python中,__call__ 是一个特殊方法,它允许实例对象像函数一样被调用。当我们在一个对象后面加上括号并传递参数时,Python解释器会查找该对象是否具有__call__方法,如果有,则调用该方法。

为什么使用 __call__ 方法
  1. 使实例对象可以像函数一样调用,提供了更灵活的使用方式。
  2. 将一个类的实例对象变成可调用对象,可以用于实现自定义的函数式编程。
示例

让我们看一个简单的示例来演示__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中编写更具表达力和可读性的代码提供了更多的选择。