乐趣区

Python类中的new和init的区别

在写 Python 类时,或者看某些我的项目源码时,总是见到 __init____new__办法,始终没有深入研究两者的区别,明天聊聊这个。

__new__

__new__是类 (class) 办法。

class 新创建实例时,会调用__new__,它次要管制一个新实例的创立。

须要晓得的是,__new__是实例创立的第一步。首先调用它,再由它负责返回类的新实例。

通常,__new__除非您要继承不可变类型(如 str,int,unicode 或 tuple),否则不用重写。

针对 __new__ 的用法,举个栗子:

按照 Python 官网文档的说法,__new__办法次要是当你继承一些不可变的 class 时(比方 int, str, tuple),提供给你一个自定义这些类的实例化过程的路径。还有就是实现自定义的 metaclass。

首先咱们来看一下第一个性能,具体咱们能够用 int 来作为一个例子:如果咱们须要一个永远都是负数的整数类型,通过集成 int,咱们可能会写出这样的代码。

但运行后会发现,后果基本不是咱们想的那样,咱们任然失去了 -3。
这是因为对于 int 这种 不可变的对象,咱们只有重载它的__new__办法能力起到自定义的作用。这是批改后的代码:

通过重载__new__办法,咱们实现了须要的性能。

__init__

__init__是实例办法。

class 调用 __init__ 时,是对这个 class 生成的新实例初始化,初始化的内容,就是 __init__ 内定义的内容。

每新创建一个实例,实例都会初始化这些内容,这些内容都是初始化给新创建的实例,跟 class 无关。

__init__不返回任何货色。创立实例后,它仅负责初始化实例,且仅在须要初始化某些内容时,才会进行调用。

参考文档:
https://stackoverflow.com/que…
https://www.cnblogs.com/shenx…
本文首发于 BigYoung 小站

退出移动版