码迷,mamicode.com
首页 > 其他好文 > 详细

__init__和__new__的异同

时间:2018-12-27 15:20:57      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:demo   bsp   ini   name   常用   init   就是   python   区别   

实例化类的流程:

1.p = Person(name, age)
2.首先执行使用name和age参数来执行Person类的__new__方法,这个__new__方法会 返回Person类的一个实例(通常情况下是使用 super(Persion, cls).__new__(cls, … …) 这样的方式),
3.然后利用这个实例来调用类的__init__方法,上一步里面__new__产生的实例也就是 __init__里面的的 self
所以,__init__ 和 __new__ 最主要的区别在于:
1.__init__ 通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后。它是实例级别的方法。
2.__new__ 通常用于控制生成一个新实例的过程。它是类级别的方法。

 

__new__方法的作用:

1. 依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。

class Demo(int):
    def __new__(cls, value):
        return super().__new__(cls,abs(value))

Demo(-3)
>>> 3

  

2. 关于自定义metaclass。

__init__和__new__的异同

标签:demo   bsp   ini   name   常用   init   就是   python   区别   

原文地址:https://www.cnblogs.com/zenan/p/10184522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!