Já používám Python 3.8.6 a to funguje v pohodě
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 nebude fungovat
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 mysl vyfukování! jediný rozdíl mezi prvním a druhým příkladem je, že soukromý atribut je __a
místo _a_
Nějaký nápad, proč? Nebyl jsem schopen na to přijít
classname
bude přestávka na podtřídy, protože setr je napsáno v základní třídě tak název atributu bude stále rozbité do_A__a
.