python中的init()方法和new方法
首先我们来了解一下init()方法,init()是一个实例方法,init()内置方法在创建对象的时候自动执行无返回值,我们可以在init()做一些初始化操作,接下来用代码来了解一下它的作用
class Person:
def __init__(self,name):
print("我是初始化方法")
self.name=name #实例属性
self.age=20
def person(self):
print("大家好,我叫{},我今年{}岁,祝大家开心每一天".format(self.name,self.age))
per=Person("snowdream")
per.person()
结果:
通过以上代码我们发现在创建对象的时候init()方法就自动执行了,并且把实例属性在各自对象的内存中都保存一份,描述类创建出来的实例化对象。
接下来我们再了解一下new方法,__new__是一个静态方法,__new__方法会返回一个创建的实例,作用就是实例化对象,其中实例化对象是Object类底层实现,其它类继承了Object的new才能够实现 实例化对象。 我们用代码来来了解一下
class Dog(object):
def __new__(cls, *args, **kwargs):
print("----__new__----")
new__=object.__new__(cls)
return new__
dog=Dog()
print(dog)
结果:
由上可以看出调用父类new方法,创建当前对象
说到这里那__new__和__init__到底有啥关系不妨我们看一下代码
class Dog(object):
def __init__(self):
print("----__init__---")
def __del__(self):
print("----__del__----")
def __new__(cls, *args, **kwargs):
print("----__new__----")
new__=object.__new__(cls)
return new__
dog=Dog()
print(dog)
结果:
由上可以看出来调用父类的__new__方法就可以创建对象,返回一个cls的实例传递__init__方法,这时__init__才能被调用,__init__接下来完成初始化操作。