Je suis à l'aide de Python 3.8.6 et cela fonctionne bien
class A:
@property
def _a(self):
return getattr(self, '_a_', 0)
@_a.setter
def _a(self, value):
self._a_ = value
a = A()
print(a._a) # prints 0
a._a = 10
print(a._a) # prints 10 as expected
Cela ne fonctionne pas
class A:
@property
def _a(self):
return getattr(self, '__a', 0)
@_a.setter
def _a(self, value):
self.__a = value
a = A()
print(a._a) # prints 0
a._a = 10
print(a._a) # prints 0 again
C'est hallucinant! la seule différence entre le premier et le deuxième exemple est celui de l'attribut privé est __a
au lieu de _a_
Aucune idée pourquoi? Je n'étais pas en mesure de le comprendre
classname
pause pour les sous-classes, parce que le setter est écrit dans la classe de base de sorte que le nom de l'attribut sera toujours mutilé à_A__a
.