狂自私

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

面向对象中__new__和__init__区别

在 Python 的面向对象编程中,__new____init__ 是两个重要的特殊方法,它们分别用于对象的创建和初始化。虽然它们的功能相互关联,但各自的作用和使用场景有所不同。以下是它们之间的主要区别:

1. __new__ 方法

  • 目的__new__ 是一个静态方法,用于创建一个新的实例。它负责分配内存并返回一个新对象。
  • 返回值__new__ 方法必须返回一个对象实例,可以是当前类的实例,也可以是其它类的实例(这在实现单例模式时特别有用)。
  • 调用顺序:在实例化对象时,Python 首先调用 __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__ 是一个实例方法,用于初始化新创建的对象。它通常用于设置对象的初始状态或属性。
  • 返回值__init__ 方法不需要返回值,通常返回 None(如果显式返回其他值,会引发错误)。
  • 调用顺序__init__ 方法在 __new__ 方法之后调用,用于对已经创建的实例进行进一步的初始化。

示例:

class MyClass:
    def __new__(cls, *args, **kwargs):
        instance = super(MyClass, cls).__new__(cls)  # 创建实例
        return instance

    def __init__(self, value):
        self.value = value  # 初始化属性

# 测试
obj = MyClass(10)
print(obj.value)  # 输出: 10

总结

  • __new__:

    • 负责创建对象。
    • 返回一个新对象的实例。
    • 是一个静态方法。
  • __init__:

    • 负责初始化对象的属性。
    • 不返回新对象,只返回 None
    • 是一个实例方法。

在大多数情况下,您只需实现 __init__ 方法,因为默认的 __new__ 方法已经可以处理常见情况。但如果您需要控制对象的创建过程(如实现单例模式或使用不可变对象),则可能需要重写 __new__ 方法。

posted on   狂自私  阅读(88)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示