python - 类 类对象 赋值后的分别变化,及删除后为什么还有值
伊谢尔伦
伊谢尔伦 2017-04-18 10:23:36
0
1
535
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伐。

répondre à tous(1)
小葫芦

Tout dans

python est un objet, class est aussi une sorte d'objet,

Comme le montre l'image ci-dessus, lorsque vous instanciez CC, il y aura deux objets dans la mémoire (les mots verts sont les propriétés et les méthodes à l'intérieur de l'objet), l'un est CC, l'autre est dd,

Lorsque vous exécutez dd.setXY(4,5), self est défini sur dd, car setXY n'existe pas dans dd, donc l'interprète recherche la classe parent, dans CC Rechercher setXY et exécutez-le, self, c'est-à-dire qu'il y a deux autres membres à l'intérieur de dd, x et y,

Comment l'interprète

sait-il que la classe parent de dd est CC ?
La réponse est, dd.__class__

Lorsque vous supprimez CC, vous supprimez en fait simplement la variable CC, mais ne supprimez pas la mémoire occupée par la classe CC, car dd existe toujours, et dd la classe existe toujours. __class__ est référencé via l'attribut CC (python la gestion de la mémoire est basée sur le comptage de références)

Donc c'est juste que la classe ne peut pas être trouvée via la variable CC, mais vous pouvez la trouver via dd.__class__,

Donc, tu peux écrire comme ça, ee = dd.__class__()

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!