Sto usando Python 3.8.6 e questo funziona bene
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
Questo non funziona
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
Che la mente che soffia. l'unica differenza tra il primo e il secondo esempio è che l'attributo private è __a
invece di _a_
Qualche idea del perché? Non ero in grado di capirlo
classname
sarà la pausa per le sottoclassi, perché il setter è scritto nella classe base in modo che il nome dell'attributo sarà ancora alterati per_A__a
.