lc88824 发表于 2024-9-19 13:38:48

__call__方法应用

在创建对象时,是不是通过__call__方法调用new方法和init方法呢?如果不是call是如何运用和实现应用的,请举例演示一下

FishC 发表于 2024-9-19 13:38:56

不是的,__call__方法与__new__和__init__方法是不同的。__call__方法是在一个对象像函数一样被调用时触发的,而__new__和__init__方法是用于创建对象时调用的。

下面我举个例子来说明__call__方法的应用:

class MyClass:
    def __init__(self, value):
      self.value = value
   
    def __call__(self, x):
      return self.value + x

# 实例化对象
obj = MyClass(10)

# 像函数一样调用对象
result = obj(5)

print(result)# 输出:15

在上面的例子中:
1. `__init__`方法在对象创建时被调用,初始化`value`属性。
2. `__call__`方法允许我们使用`obj(5)`这种方式来调用对象,其中传递的参数5将被`__call__`方法接收并处理。

这样,你的对象就可以像函数一样被调用,并且可以执行一些自定义的操作。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

isdkz 发表于 2024-9-19 13:48:21

本帖最后由 isdkz 于 2024-9-22 01:34 编辑

__call__做法是可调用对象在执行调用操作时执行的方法

而一个类在实例化的时候,例如Turtle(),在一个对象后面跟个括号实质上就是调用操作

这时候Turtle就作为一个可调用对象,即Turtle是由谁实例化而来,就调用了谁的__call__方法,一个类是由该类的元类实例化而来

所以一个类在实例化的时候,实际上是调用了这个类的元类的__call__方法,然后对这个类的__new__、__init__方法的调用,就是在这个类的元类的__call__方法中进行的,你的理解没有问题
页: [1]
查看完整版本: __call__方法应用