python创建对象的过程

一直嚷嚷着面向对象编程,对象是咋出来的?

刚学面向对象的时候,其他啥也没记住,就记住一个__init__方法,当时就感觉这方法很牛皮,能搞一个对象出来,但是直到有一天手贱点object源码看,才发现自己一直都是错的。
在这里插入图片描述??? 为什么是initialize不是create?继续往下找
在这里插入图片描述
Create and return new object,人家清清楚楚的写着,是我创建的对象。

那行吧,我隐约的认识到是__new__创建的对象,__init__只是赋了属性,
以代码为准,自己搞一下来看看

class A(object):

    def __new__(cls, *args, **kwargs):   
        print(cls.__name__)     #看看这个cls是谁
        print("是我创建的对象")
        a = object.__new__(cls)     #要依靠object基类的方法
        a.name = "a"
        print(id(a))            #看看这创建的对象是否与下边实例化出来的对象是一个东西
        return a

    def __init__(self,age):   
        print(self.name)      #看看这个self是谁
        self.age = age
        print("我负责给对象属性")  

m = A(1)
print(id(m))

运行结果:
在这里插入图片描述
来分析一下:
1.因为先出现"我创建的对象",所以__new__先于__init__执行
2.传入__new__是A这个类,那么调用object返回的对象就是A类的实例
3.__new__创建的对象的id与传入__init__的对象的id以及类实例化之后的对象的id一样,他们三个是同一个东西

好了,到了这,基本流程我们也能看出来了:
首先一个类实例化一个对象时,先调用__new__来创建一个对象(没有任何属性),之后__init__拿到这个对象后给对象属性。

总结:__ init __()封装属性 __ new __创建对象

发布了62 篇原创文章 · 获赞 13 · 访问量 2965

猜你喜欢

转载自blog.csdn.net/Yanghongru/article/details/105306985