python的__init__和__new__的区别

Python 的 __init__ 和 __new__ 的区别

python的__init__和__new__的区别

概述

在 Python 中,__new____init__ 是两个特殊方法,用于创建和初始化对象。虽然这两个方法都涉及到对象的创建,但它们在行为、时机和用途上存在着一些关键区别。理解这些区别对于深入了解 Python 类的内部工作原理至关重要。

new

__new__ 是第一个被调用的特殊方法,它负责创建新对象。它接受类本身作为第一个参数,后面可以跟随任意数量的参数。__new__ 方法可以返回新创建的对象或引发异常。如果 __new__ 成功创建对象,它将返回该对象。否则,它将引发异常,例如 TypeErrorMemoryError,这将阻止对象的创建。

要点:

  • __new__ 是一个类方法,返回新创建的对象或引发异常。
  • 它用于创建新对象,在 __init__ 之前调用。
  • 如果 __new__ 失败,__init__ 不会被调用。

init

__init__ 是第二个被调用的特殊方法,它负责初始化新创建的对象。它接收新创建的对象作为第一个参数,后面可以跟随任意数量的参数。__init__ 方法不应返回任何值。它的主要目的是初始化对象的状态,例如设置属性值。__init__ 可以在对象的整个生命周期中被多次调用。

要点:

  • __init__ 是一个实例方法,对新创建的对象进行初始化。
  • 它用于设置对象的状态,在 __new__ 之后调用。
  • __init__ 可以随时在对象上被调用,而不仅仅是在创建时。

区别

以下是一些 __new____init__ 之间的主要区别:

  1. 时机:__new____init__ 之前被调用。
  2. 返回值:__new__ 返回新创建的对象,而 __init__ 不返回任何值。
  3. 作用:__new__ 负责创建对象,而 __init__ 负责初始化对象。
  4. 调用频率:__new__ 通常只在创建对象时调用一次,而 __init__ 可以随时在对象上被调用。

何时重写 newinit

在某些情况下,你可能需要重写 __new____init__ 方法,例如:

  1. 重写 _new_:
    • 控制对象创建过程。
    • 限制对象的创建。
    • 返回代理类或工厂模式创建的对象。
  2. 重写 _init_:
    • 初始化对象的状态。
    • 验证对象的输入。
    • 执行复杂的初始化逻辑。

问答

1. __new____init__ 的调用顺序是什么?
答:__new____init__ 之前被调用。

2. __new__ 应该返回什么?
答:__new__ 应该返回新创建的对象。

3. __init__ 主要用于做什么?
答:__init__ 主要用于初始化对象的状态。

4. 我需要什么时候重写 __new__ 方法?
答:你需要重写 __new__ 方法,当你需要控制对象创建过程或返回代理类或工厂模式创建的对象时。

5. 我需要什么时候重写 __init__ 方法?

原创文章,作者:杨文宁,如若转载,请注明出处:https://www.wanglitou.cn/article_101764.html

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2024-07-06 23:50
下一篇 2024-07-06 23:52

相关推荐

公众号