共计 799 个字符,预计需要花费 2 分钟才能阅读完成。
在写 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 小站