“创建对象”和“初始化”对象有啥区别? [复制]

Posted

技术标签:

【中文标题】“创建对象”和“初始化”对象有啥区别? [复制]【英文标题】:What is the difference between "Creating an object" and "Initializing" an object? [duplicate]“创建对象”和“初始化”对象有什么区别? [复制] 【发布时间】:2021-10-25 21:45:45 【问题描述】:

最近,我看到有人在谈论__new__ 方法并阅读了一篇有关它的文章。 (我之前一直用__init__,从来不知道__new__) 文章解释了__new__方法是在创建对象时调用的,然后会调用__init__方法来初始化对象。

有什么区别?初始化对象是什么意思?

【问题讨论】:

【参考方案1】:

两种方法都被调用。 __new__ 首先被调用,它返回一个类的实例。此实例作为self 传递给__init__

阅读here了解更多信息。

【讨论】:

【参考方案2】:

正如下面链接中提到的以及根据我的经验,我们总是使用__init__ 来定义类构造函数,但我很少看到有人使用__new__

要解释的另一点是,如果要对 str、int、Unicode 或 tuple 等不可变类型进行子类化,请使用 __new__。不可变对象是在程序运行期间不会改变的对象。

https://dev.to/pila/constructors-in-python-init-vs-new-2f9j

【讨论】:

【参考方案3】:

在python中一切都是一个对象,所以当你创建一个类时,python会创建一个类对象。假设这段代码:

class Example:
    def __init__(self) -> None:
        self.var = 0

python 创建一个 Example 类对象。在这个对象中有一些方法,例如__init____new__。然后假设代码和平:

obj = Example()

在运行时,python 调用 Example 类对象上的 __new__ 方法并将距离(__new__ 结果)传递给 __init__ 方法。现在你有了你的对象。

【讨论】:

以上是关于“创建对象”和“初始化”对象有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

工厂模式,简单工厂模式,抽象工厂模式三者有啥区别

Malloc 和 new 运算符分配内存有啥区别? [复制]

Malloc 和 new 运算符分配内存有啥区别? [复制]

python中的构造函数和初始化程序有啥区别? [复制]

js中new创建对象时带括号和不带括号有啥区别

JAVA中加new和不加new的区别