这个__new__确实很少见到,先做了解吧.
class TestCls():
def __init__(self, name):
print('init')
print(self)
print(type(self))
self.name = name
def __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,new和init来分别在类创建,实例创建和实例初始化的时候做一些小手脚.
参数
new的第一个占位参数是class对象
init的第一个占位参数是class的实例对象
其他的参数应一致
作用
new 用来创建实例,在返回的实例上执行init,如果不返回实例那么init将不会执行
init 用来初始化实例,设置属性什么的