Ja používam Python 3.8.6 a to funguje
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
To nefunguje
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
To je myseľ vyfúknutie! jediný rozdiel medzi prvým a druhým príkladom je, že súkromný atribút je __a
namiesto _a_
Nejaký nápad, prečo? Nevedela som na to prísť
classname
bude prestávka na podtriedy, pretože setter je napísané v základnej triede takže názov atribútu bude stále rozbité na_A__a
.