Maison > Questions et réponses > le corps du texte
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的作用,第二点是为赋值后撒类对象变化了而类却没变
高洛峰2017-04-18 10:25:36
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
,
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__()