python __new__ __inti__ 区别

Python newinit 区别

python __new__ __inti__ 区别

在 Python 中,newinit 都是特殊方法,主要用于在创建对象时执行初始化操作。下面是这两个方法的主要区别:

1. 方法签名

new 方法的签名为:
python
def __new__(cls, *args, **kwargs):

其中,cls 参数表示正在创建的类的引用。

init 方法的签名为:
python
def __init__(self, *args, **kwargs):

其中,self 参数表示正在创建的对象的引用。

2. 调用时机

new 方法在创建对象之前被调用,它负责分配内存并创建新对象。如果 new 方法返回一个对象,则会调用 init 方法。

init 方法在创建对象之后被调用,它负责对象实例的初始化,设置属性值和执行其他必要的初始化操作。

3. 常用场景

new 方法通常用于以下场景:

  • 实现自定义类元类(Metaclass)
  • 控制对象创建过程,例如实现单例模式
  • 拦截对象创建,例如实现代理模式

    init 方法通常用于以下场景:

  • 初始化对象属性

  • 执行其他必要的初始化操作
  • 调用父类的 init 方法

    4. 详细说明

    new 方法

  • new 方法由类调用,而不是由对象调用。

  • 它在对象创建之前被调用,并且必须返回一个对象。
  • 如果 new 方法返回 None,则不会创建对象。
  • 如果 new 方法返回一个对象,则会调用 init 方法来初始化对象。
  • new 方法可以被类派生类覆盖。
  • new 方法通常用于实现更高级的对象创建逻辑。

    init 方法

  • init 方法由对象调用,而不是由类调用。

  • 它在对象创建之后被调用。
  • 它负责初始化对象属性和执行其他必要的初始化操作。
  • init 方法可以被类派生类覆盖。
  • init 方法通常用于设置对象属性并执行其他初始化操作。

    示例

    下面是一个示例,演示了 newinit 方法的用法:
    “`python
    class MyClass:
    def new(cls, value):
    if value < 0:
    return None # 不创建负值对象
    return super().new(cls)

    def __init__(self, value):
        self.value = value
    

    obj = MyClass(5) # 创建一个 value 为 5 的对象
    obj2 = MyClass(-1) # 不创建 value 为 -1 的对象
    “`

    总结

    综上所述,new 方法用于在创建对象之前控制对象创建过程,而 init 方法用于在创建对象之后初始化对象。这两个方法在 Python 中对象创建和初始化过程中扮演着至关重要的角色。

    问答

  1. _newinit_ 方法有什么相同点?

    答:这两个方法都是特殊方法,在创建对象时执行初始化操作。

  2. _new_ 方法的主要作用是什么?

    答:控制对象创建过程,例如实现自定义类元类和代理模式。

  3. _init_ 方法的主要作用是什么?

    答:初始化对象属性和执行其他必要的初始化操作。

  4. _new_ 方法必须返回什么?

    答:一个对象,如果返回 None,则不会创建对象。

  5. _init_ 方法由谁调用?

    答:由对象调用。

原创文章,作者:王利头,如若转载,请注明出处:https://www.wanglitou.cn/article_17715.html

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2024-04-16 17:27
下一篇 2024-04-16 17:36

相关推荐

公众号