“创建对象”和“初始化”对象有啥区别? [复制]
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 运算符分配内存有啥区别? [复制]