为什么上述代码可以通过obj(10)调用__call__函数
时间: 2024-05-01 17:20:01 浏览: 13
在 Python 中,我们可以使用 `()` 运算符来调用一个对象。当我们对一个对象使用 `()` 运算符时,Python 会在该对象上寻找 `__call__` 方法。如果该对象实现了 `__call__` 方法,Python 就会调用这个方法。
在上述代码中,我们创建了一个 `MyClass` 类的实例 `obj`,并将其赋值给变量 `obj`。接着,我们使用 `obj(10)` 的方式来调用 `__call__` 方法,并将参数 `10` 传递给 `__call__` 方法。由于 `obj` 对象实现了 `__call__` 方法,所以 Python 就会调用这个方法,并将参数 `10` 传递给它。
因此,通过 `obj(10)` 调用 `__call__` 方法是有效的,输出了 "My Function is called with argument 10"。
相关问题
__call__魔法函数的功能的demo
好的,以下是__call__函数的一个例子:
```python
class MyClass:
def __init__(self, name):
self.name = name
def __call__(self):
print("Hello, my name is " + self.name)
my_obj = MyClass("John")
my_obj() # -> Hello, my name is John
```
在这个例子中,我们定义了一个名为`MyClass`的类,并在类中定义了`__init__`和`__call__`函数。
`__init__`函数是Python中的构造函数。我们在这里初始化了类的`name`属性,并将其设置为给定的值。
`__call__`函数在实例对象被调用时自动被调用。在这个例子中,我们在`__call__`函数中打印出了一条带有`name`属性值的消息。
我们创建了一个`MyClass`类的实例对象`my_obj`,并调用它。由于`my_obj`是一个对象,而不是函数,我们需要使用括号对实例对象进行调用。调用`my_obj()`后,`__call__`函数被调用并输出`Hello, my name is John`。
__call__()函数怎么用
`__call__()`函数是Python中的一个特殊函数,用于将一个类的实例像函数一样进行调用。
当一个类定义了`__call__()`函数后,它的实例就可以像函数一样进行调用。例如:
```python
class MyClass:
def __call__(self, arg):
print("arg is:", arg)
my_obj = MyClass()
my_obj("hello")
```
输出结果为:`arg is: hello`
在上面的例子中,我们定义了一个`MyClass`类,它包含了一个`__call__()`函数。当我们创建了一个`MyClass`的实例`my_obj`后,我们可以像调用函数一样使用它,即`my_obj("hello")`,这会触发`__call__()`函数的执行。
`__call__()`函数可以带有参数,可以返回值,因此可以用于实现各种不同的功能,例如实现一个函数缓存器,实现一个类似装饰器的功能等等。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.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)