python class __new__、__init__、__call__ 区别

在Python中,__new____init____call__ 是三个不同的特殊方法,它们在类的创建和调用过程中扮演着不同的角色。以下是它们的区别和用法:

1. __new__ 方法

  • 作用__new__ 是一个静态方法,负责创建并返回一个新的实例。它是类的构造方法,通常用于定制类的实例化过程。
  • 调用时机:在一个对象实例化时,__new__ 最先被调用,它负责创建实例然后将其传递给 __init__
  • 返回值:必须返回一个实例。
例子:
class MyClass:
    def __new__(cls, *args, **kwargs):
        print("Creating instance")
        instance = super(MyClass, cls).__new__(cls)
        return instance

    def __init__(self, value):
        print("Initializing instance")
        self.value = value

obj = MyClass(10)

输出:

Creating instance
Initializing instance

2. __init__ 方法

  • 作用__init__ 是一个实例方法,用于初始化实例。它不负责创建实例,而是在实例创建之后被调用,用于设置实例的初始状态。
  • 调用时机:在对象实例创建后(即 __new__ 方法返回实例后),自动调用 __init__ 方法。
  • 返回值:没有返回值。
例子:
class MyClass:
    def __init__(self, value):
        print("Initializing instance")
        self.value = value

obj = MyClass(10)

输出:

Initializing instance

3. __call__ 方法

  • 作用__call__ 是一个实例方法,使得类的实例可以像函数一样被调用。
  • 调用时机:当你对一个实例进行“调用”操作时,即使用圆括号 (),就会触发 __call__ 方法。
  • 返回值:可以有返回值,也可以没有,根据实现决定。
例子:
class MyClass:
    def __init__(self, value):
        self.value = value

    def __call__(self, x):
        print(f"Called instance with {x}, value is {self.value}")
        return self.value + x

obj = MyClass(10)
result = obj(5)  # 等同于 obj.__call__(5)
print(result)

输出:

Called instance with 5, value is 10
15

总结

  • __new__:用于创建并返回一个新的实例,在实例化过程中最先被调用。
  • __init__:用于初始化实例,在实例创建之后被调用。
  • __call__:使实例可以像函数一样被调用。

这三个方法分别负责不同阶段的操作,合理使用它们可以更好地控制类的行为和特性。

效果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少陽君

谢谢老板的拿铁

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值