类的__call__方法
时间: 2023-12-17 08:05:11 浏览: 36
类的__call__方法是一个特殊的方法,它允许类的实例对象像函数一样被调用。当一个类的实例对象被调用时,就会执行该实例对象的__call__方法中的代码。下面是一个简单的例子:
```python
class Adder:
def __init__(self, x):
self.x = x
def __call__(self, y):
return self.x + y
add5 = Adder(5)
print(add5(3)) # 输出:8
```
在这个例子中,我们定义了一个Adder类,它有一个__init__方法和一个__call__方法。__init__方法用于初始化实例对象的属性,而__call__方法用于将实例对象像函数一样调用。我们创建了一个add5实例对象,并将其初始化为Adder(5)。然后我们将add5作为函数一样调用,并传入参数3,最终输出8。
相关问题
__call__ 方法
__call__ 方法是一个特殊方法,在 Python 中用于将一个对象作为函数来调用。当调用一个对象时,如果该对象定义了 __call__ 方法,Python 解释器会自动调用该方法。
__call__ 方法可以在类中定义,也可以在类的实例中定义。当类的实例被调用时,会调用实例的 __call__ 方法。
下面是一个示例:
```python
class CallableClass:
def __init__(self, name):
self.name = name
def __call__(self, *args, **kwargs):
print(f"Calling object {self.name} with args: {args}, kwargs: {kwargs}")
# 创建一个实例
obj = CallableClass("example")
# 调用对象
obj(1, 2, key="value")
```
输出:
```
Calling object example with args: (1, 2), kwargs: {'key': 'value'}
```
在上面的示例中,CallableClass 定义了一个 __call__ 方法。当我们创建了一个 CallableClass 的实例 obj 后,可以像调用函数一样直接调用 obj,并传入参数。调用时,会触发 obj 的 __call__ 方法。在这个方法中,我们可以定义对象被调用时的行为。
__call__方法
在 Python 中,如果一个类定义了__call__方法,那么它的实例就可以像函数一样调用。__call__方法允许对象行为像函数一样,接受参数并返回值。
例如:
```
class Foo:
def __call__(self, *args, **kwargs):
print("Calling the Foo instance")
f = Foo()
f() # prints "Calling the Foo instance"
```
上面的类Foo的实例f就可以像函数一样调用,输出"Calling the Foo instance"
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)