Python类中的__new__和__init__的区别
2021-04-19 03:29
标签:ons alt 技术 不可变 python 控制 自定义 png 过程 在写Python类时,或者看某些项目源码时,总是见到 class新创建实例时,会调用 需要知道的是, 通常, 针对 依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。还有就是实现自定义的metaclass。 首先我们来看一下第一个功能,具体我们可以用int来作为一个例子:假如我们需要一个永远都是正数的整数类型,通过集成 int,我们可能会写出这样的代码。 但运行后会发现,结果根本不是我们想的那样,我们任然得到了-3。 class调用 每新创建一个实例,实例都会初始化这些内容,这些内容都是初始化给新创建的实例,跟class无关。 参考文档: Python类中的__new__和__init__的区别 标签:ons alt 技术 不可变 python 控制 自定义 png 过程 原文地址:https://www.cnblogs.com/bigyoung/p/13292140.html__init__
和__new__
方法,一直没有深入研究两者的区别,今天聊聊这个。__new__
__new__
是类(class)方法。__new__
,它主要控制一个新实例的创建。__new__
是实例创建的第一步。首先调用它,再由它负责返回类的新实例。__new__
除非您要继承不可变类型(如str,int,unicode或tuple),否则不必重写。__new__
的用法,举个栗子:
这是因为对于int这种 不可变的对象,我们只有重载它的__new__方法才能起到自定义的作用。这是修改后的代码:
通过重载__new__方法,我们实现了需要的功能。__init__
__init__
是实例方法。__init__
时,是对这个class生成的新实例初始化,初始化的内容,就是__init__
内定义的内容。__init__
不返回任何东西。创建实例后,它仅负责初始化实例,且仅在需要初始化某些内容时,才会进行调用。
https://stackoverflow.com/questions/674304/why-is-init-always-called-after-new
https://www.cnblogs.com/shenxiaolin/p/9307496.html
本文首发于BigYoung小站
文章标题:Python类中的__new__和__init__的区别
文章链接:http://soscw.com/index.php/essay/76490.html