__new__()是创建对象方法 __int__()是初始化对象方法
class Person(object):
#创建(对象)方法
def __new__(cls, *args, **kwargs):
#2.Person传给了cls,就是创建的对象的类型传给了cls,所以id(cls)=id(Person)
print('__new__调用的cls,id:{0}'.format(id(cls)))#1621114168000
obj=super().__new__(cls)#3.把Person传进了object里,创建对象obj
print('创建的对象obj的id:{0}'.format(id(obj)))#1621115397712
return obj#返回obj
#初始化(对象)方法
def __init__(self,name,age):#4.把obj传给了self,所以id(obj)=id(self)
print(' __init__调用,self的id:{0}'.format(id(self)))#1621115397712
self.name=name
self.age=age
print('object类对象的id:{0}'.format(id(object)))#140703538755456
print('Person类对象的id:{0}'.format(id(Person)))#1621114168000,Person类的标识
p1=Person('陈皮',18)#1.首先执行的是Person(),把person传给cls.实例对象,id(p1)=id(self)
print('陈皮的id:{0}'.format(id(p1)))#1621115397712
结果:
object类对象的id:140703538755456
Person类对象的id:1621114168000
__new__调用的cls,id:1621114168000
创建的对象obj的id:1621115397712
__init__调用,self的id:1621115397712
陈皮的id:1621115397712
解释:
'''new方法里被创建的对象obj就是init里的self和p1 p1=Person('陈皮',18), 先执行Person('陈皮',18),把Person这个类对象传给new中的cls-->就是把要创建对象的类传给cls,确定实例对象的类型 然后又重写了object类中的new方法,创建了对象obj,返回obj-->obj就是实例对象p1的前身 然后把obj传给init方法中的self,给对象obj设置参数name和age-->就是给obj添加了内容,把'陈皮'和18加了进去 Person('陈皮',18)执行完成,把Person('陈皮',18)赋给p1,实例对象创建完成 '''
可以再创建一个实例对象 ,进行验证:
print('---------悟空------------')
p2=Person('孙悟空',387)
print('孙悟空的id:{0}'.format(id(p2)))
结果:
---------悟空------------
__new__调用的cls,id:1621114168000
创建的对象obj的id:1621115397616
__init__调用,self的id:1621115397616
孙悟空的id:1621115397616
id(obj)=id(self)=id(p2),
id(cls)=id(Person), 正确
版权声明:本文为weixin_45757669原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。