📜  __call__() python (1)

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

Python中的__call__()

在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__()方法,我们可以创建可调用对象,这些对象可以带有状态,并且可以在每次调用时更新其状态。