__new__和__init__的区别

来源:互联网 发布:股票数据 matlab 编辑:程序博客网 时间:2024/06/05 23:08

这个__new__确实很少见到,先做了解吧.

class TestCls():

def __init__(self, name):    print('init')    print(self)    print(type(self))    self.name = namedef __new__(cls, name):    print('new')    print(cls)    print(type(cls))    return super().__new__(cls)

c = TestCls(“CooMark”)

new是一个静态方法,而init是一个实例方法.
new方法会返回一个创建的实例,而init什么都不返回.
只有在new返回一个cls的实例时后面的init才能被调用.
当创建一个新实例时调用new,初始化一个实例时用init.
ps: metaclass是创建类时起作用.所以我们可以分别使用metaclass,newinit来分别在类创建,实例创建和实例初始化的时候做一些小手脚.

参数
new的第一个占位参数是class对象
init的第一个占位参数是class的实例对象
其他的参数应一致
作用
new 用来创建实例,在返回的实例上执行init,如果不返回实例那么init将不会执行
init 用来初始化实例,设置属性什么的

原创粉丝点击