Le code suivant:Pourquoi le paramètre "name" de __setattr__ inclut-il la classe, mais __getattr__ ne l'est pas?
class MyClass():
def test(self):
self.__x = 0
def __setattr__(self, name, value):
print name
def __getattr__(self, name):
print name
raise AttributeError(name)
x = MyClass()
x.test()
x.__y
Sorties:
_MyClass__x
__y
Traceback (most recent call last):
...
AttributeError: __y
La documentation est tout à fait inutile indiquant le « nom » est le « nom de l'attribut », mais pour une raison quelconque, il est différent selon que vous le définissez ou l'obtenez.
Ce que je veux savoir est:
- que je fais quelque chose de fondamentalement mal ici?
- Comment puis-je obtenir
x
dans le premier cas au lieu de_MyClass__x
?
Oups, j'ai manqué les caractères de soulignement du '__y'. Je l'ai corrigé maintenant.Il y a toujours une asymétrie, mais je pense que vous avez atteint le problème principal. – Draemon