python中__new__和__init__方法使用与内在逻辑

new在前去创建对象,init在后对对象的实例属性进行赋值,最后将创建的对象放在p1(本代码的实例化对象)中。

"""
    __init__和__new__
        __new__:创建对象。
        __init__:对创建的对象进行初始化。
"""
#定义Person类
class Person(object):

    def __new__(cls, *args, **kwargs):
        print("__new__()方法被调用,函数中cls的id为:{0}".format(id(cls)))
        obj = super().__new__(cls)
        print("创建的obj对象的id为:{0}".format(id(obj)))
        return obj

    def __init__(self, name, age):
        print("__init__()被调用,函数中self的id为:{0}".format(id(self)))
        self.name = name
        self.age = age

print("object类对象的id为:{0}".format(id(object)))
print("Person类对象的id为:{0}".format(id(Person)))

#创建Person类的实例对象
p1 = Person("张三", 20)
print("p1这个Person类对象的id为:{0}".format(id(p1)))

附一张内在逻辑的导向图:实例化Person时,先将Person给到new方法当中的cls,然后将cls传到object方法的new方法去创建对象,其后将创建的对象赋值给self,self初始化结束后,将对象赋值给p1。在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值