python - 类 类对象 赋值后的分别变化,及删除后为什么还有值
伊谢尔伦
伊谢尔伦 2017-04-18 10:23:36
0
1
540
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 defined
dd.printXY()                                 # 4 5

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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(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__()

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!