class Cat:
    def func(self):
        self = None

a = Cat()

print(a)

a.func()

print(a)

Je pensais que j'obtiendrais None avec la deuxième fonction d'impression, mais j'ai obtenu les mêmes adresses d'objet pour les deux impressions. Pourquoi ne puis-je pas modifier l'objet avec la méthode de classe ?

0
Eric Whale 3 nov. 2020 à 21:05

1 réponse

Meilleure réponse

Dans la méthode de classe, self est un argument qui fait partie de la portée locale. L'affectation à une variable de portée locale modifie uniquement la portée locale. Si vous deviez attribuer à un attribut de self tel que

self.foo = “Bar”

Ensuite, vous modifieriez l'objet lui-même.

De plus, l'objet est référencé par a dans la portée (globale) appelante et cette référence empêcherait la destruction de l'objet.

En d'autres termes, self et a font tous deux référence au même objet et l'attribution de self=None ne supprime qu'une de ces références.

1
B. Morris 3 nov. 2020 à 18:23