Python __new__与__int__演示创建对象的过程

  • Post author:
  • Post category:python


__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 版权协议,转载请附上原文出处链接和本声明。