python

xiaoxiao2021-02-28  59

__new__和__init__的区别

__new__是Python面向对象语言中一个很少用的函数,更多使用的是init这个函数。例如:

class Book(object): def __init__(self, title): super(Book, self).__init__(self) self.title = title # Define a book b = Book('The Django Book') print(b.title)

上面算是OOP语言的入门代码了,粗略一看__init__和java中的构造函数一样,其实不然,实际上它根本不能算的上构造函数。__new__才是创建实例的方法。

根据官方文档:

__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。

__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例,是个静态方法。

也就是,__new__在__init__之前被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。

class Book(object): def __new__(cls, title): print '__new__' return super(Book, cls).__new__(cls) def __init__(self, title): print '__init__' super(Book, self).__init__(self) self.title = title b = Book('The Django Book') print(b.title)

上面执行的结果:

__new__ __init__ The Django Book
转载请注明原文地址: https://www.6miu.com/read-70293.html

最新回复(0)