网站地图 联系我们

学习python首选-实战python学习班,专注于python高级工程师培养,python课程:包括Python核心编程技术、全栈开发、网络爬虫、人工智能等。python全栈工程师+提高工作经验,获取免费试听课程!
当前位置: python培训 > python学习 > 常见问题 > 正文

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

来源:肚皮舞 浏览量: 发布日期:20-08-31 10:57:04 调整字体大小【 【所属栏目:常见问题】

  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':

  dd.setXY(4,5)

  print(dd.__dict__) #{'y': 5, 'x': 4}#赋值后类对象有值了

  print(CC.__dict__) #{'printXY': , '__module__': '__main__', '__dict__': , '__weakref__': , '__doc__': None, 'setXY': }#赋值后没变

  del CC

  #ee=CC() NameError: name 'CC' is not defined

  dd.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__()

标签:
肚皮舞新闻动态News Center

肚皮舞视频

肚皮舞培训课程

联系卡伊丝contact us
联系我们
python培训「零基础入门到精通」python人工智能编程培训班-0798wz.com

咨询热线:18301225663