python类对象 赋值后的分别变化,及删除后为什么还有,python赋值,class CC:
python类对象 赋值后的分别变化,及删除后为什么还有,python赋值,class CC:
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__': <attribute '__weakref__' of 'CC' objects>, '__doc__': None, '__dict__': <attribute '__dict__' of 'CC' objects>, 'printXY': <function CC.printXY at 0x0000000000A50268>, '__module__': '__main__', 'setXY': <function CC.setXY at 0 #输出类CC的所有成员dd.setXY(4,5)print(dd.__dict__) #{'y': 5, 'x': 4}#赋值后类对象有值了print(CC.__dict__) #{'printXY': <function CC.printXY at 0x0000000001160268>, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'CC' objects>, '__weakref__': <attribute '__weakref__' of 'CC' objects>, '__doc__': None, 'setXY': <function CC.setXY at 0x00000000011601E0>}#赋值后没变del CC#ee=CC() NameError: name 'CC' is not defineddd.printXY() # 4 5
第一点是那个self的作用,第二点是为赋值后撒类对象变化了而类却没变
python中一切皆对象,class也是对象的一种,
如上图,当你实例化CC以后,内存中就有了两个对象(绿色字是对象内部的属性和方法),一个是CC,一个是dd,
当你执行dd.setXY(4,5)时,self就被设置为dd,因为setXY不存在于dd中,所以解释器沿着父类往上找,在CC中找到了setXY并执行,self,即dd内部就多了两个成员x和y,
解释器是怎么知道dd的父类是CC呢?
答案是,dd.__class__
当你删除了CC以后,其实你只是删除了CC这个变量而已,,并没有删除类CC所占有的内存,因为dd还依旧存在的,dd还通过属性__class__引用着类CC(python内存管理是基于引用计数的)
因此只是无法通过变量CC找到类而已,但是你可以通过dd.__class__找到,
因此,你可以这样写,ee = dd.__class__()
编橙之家文章,
相关内容
- 有没有快一点的Python扫描发包方法,原来的速度好慢,
- Python type(type)得到结果为<type 'type'>如何理解
- pycharm打开python与django控制台出现Connection refused错误,
- Flask程序如何做能达到提交表单同样效果,flask表单,一
- Python解题时遇到string index out of range错误求原因分析,
- Python倒计时效果用什么方法实现,python倒计时,我在尝试
- python报错:wordcloud.whl is not a supported wheel on this plat,
- 实现PythonFlask后台数据实时显示的方法,pythonflask后台
- Python celery与redis构建消息list阻塞问题求助,celeryredis
- python flask新手相关的问题,pythonflask,问题home.html{
评论关闭