python__new__和__init__区别

Python__new____init__ 的区别

python__new__和__init__区别

在 Python 中,__new____init__ 都是类方法,它们在对象创建和初始化过程中起着至关重要的作用。虽然这两个方法名称相似,但它们的功能和调用时机却截然不同。本文将深入探讨 __new____init__ 之间的区别,以及它们在 Python 对象创建和初始化中的作用。

__new__ 方法

__new__ 是一种静态方法,它负责创建一个新对象。它接受一个类作为其第一个参数,后面是创建新对象的任何其他参数(如果有的话)。__new__ 方法的返回类型是新创建的对象本身。

当使用 class 关键字创建新类时,Python 解释器会自动为该类创建 __new__ 方法。如果没有显式定义 __new__ 方法,Python 将使用默认的 __new__ 方法,该方法位于 object 类中。

“`python

自定义 new 方法

class MyClass:
def new(cls, args, *kwargs):
print(“调用了 new 方法”)
return super().new(cls, args, *kwargs)

my_object = MyClass() # 调用 new 方法创建对象
“`

__init__ 方法

__init__ 是一种实例方法,它在 __new__ 方法创建对象后被调用。它负责初始化新创建的对象。__init__ 方法接受新创建的对象作为其第一个参数,后面是初始化对象所需的其他任何参数(如果有的话)。 __init__ 方法没有显式的返回类型。

当实例化一个类时,Python 解释器会自动调用该类的 __init__ 方法。如果没有显式定义 __init__ 方法,Python 将使用默认的 __init__ 方法,该方法位于 object 类中。

“`python

自定义 init 方法

class MyClass:
def init(self, name):
print(“调用了 init 方法”)
self.name = name

myobject = MyClass(“myobject”) # 调用 init 方法初始化对象
“`

__new____init__ 之间的区别

功能:

  • __new__:创建新对象。
  • __init__:初始化新创建的对象。

调用时机:

  • __new__: __init__ 之前调用。
  • __init__: __new__ 之后调用。

返回类型:

  • __new__: 返回新创建的对象。
  • __init__: 没有显式的返回类型。

其他区别:

  • __new__ 是一个静态方法,由类调用,而 __init__ 是一个实例方法,由对象调用。
  • __new__ 负责对象的创建,而 __init__ 负责对象的初始化。
  • __new__ 可以被子类重写,而 __init__ 总是被子类重写。

何时重写 __new____init__

通常情况下,不需要重写 __new____init__ 方法。但是,在某些情况下,重写这些方法可以实现特殊的行为。

重写 *__new__ 的原因:*

  • 控制对象的创建过程,例如为对象分配自定义唯一标识符。
  • 创建子类对象而不创建父类对象。

重写 *__init__ 的原因:*

  • 初始化对象的属性。
  • 验证对象的输入。
  • 执行与对象初始化相关的任何其他操作。

问答

1. 什么是 *__new__ 方法?*

__new__ 是一个静态方法,它负责创建一个新对象。

2. 什么是 *__init__ 方法?*

__init__ 是一个实例方法,它在 __new__ 方法创建对象后被调用,负责初始化对象。

3. *__new____init__ 的调用时机有什么区别?*

__new____init__ 之前被调用。

4. *__new____init__ 的返回类型有什么区别?*

__new__ 返回新创建的对象,而 __init__ 没有显式的返回类型。

5. 为什么在 Python 中重写 *__new____init__ 方法?*

可以在特殊情况下重写 __new____init__ 方法,例如控制对象的创建过程或初始化对象的属性。

原创文章,作者:武鸿淑,如若转载,请注明出处:https://www.wanglitou.cn/article_56809.html

(0)
打赏 微信扫一扫 微信扫一扫
武鸿淑武鸿淑
上一篇 2024-06-05 04:38
下一篇 2024-06-05 04:40

相关推荐

公众号