python - 类 类对象 赋值后的分别变化,及删除后为什么还有值

 adfa3sd5f6a 发布于 2022-10-25 17:49
class CC:
    def setXY(self,x,y):
        self.x=x
        self.y=y
    def printXY(self):
        print(self.x,self.y)

dd=CC()
print(dd.__dict__)                         # {}  #对象CC()的所有成员
print(CC.__dict__)                       #{'__weakref__': , '__doc__': None, '__dict__': , 'printXY': , '__module__': '__main__', 'setXY': , '__module__': '__main__', '__dict__': , '__weakref__': , '__doc__': None, 'setXY': }#赋值后没变

del CC
#ee=CC()   NameError: name 'CC' is not defined
dd.printXY()                                 # 4 5

第一点是那个self的作用,第二点是为赋值后撒类对象变化了而类却没变

1 个回答
  • python中一切皆对象,class也是对象的一种,

    如上图,当你实例化CC以后,内存中就有了两个对象(绿色字是对象内部的属性和方法),一个是CC,一个是dd

    当你执行dd.setXY(4,5)时,self就被设置为dd,因为setXY不存在于dd中,所以解释器沿着父类往上找,在CC中找到了setXY并执行,self,即dd内部就多了两个成员xy

    解释器是怎么知道dd的父类是CC呢?
    答案是,dd.__class__

    当你删除了CC以后,其实你只是删除了CC这个变量而已,,并没有删除类CC所占有的内存,因为dd还依旧存在的,dd还通过属性__class__引用着类CCpython内存管理是基于引用计数的)

    因此只是无法通过变量CC找到类而已,但是你可以通过dd.__class__找到,

    因此,你可以这样写,ee = dd.__class__()

    2022-10-26 23:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有