К сожалению, вы не можете напрямую определить установщик для свойство, определенное в суперклассе Python, но вы можете просто переопределить его, как показано ниже. Более интересно: в Python у вас есть «магическая функция» super, возвращающая прокси-объект родительского/суперкласса, что позволяет реализовать дерзкую реализацию readonly(), которая кажется действительно хакерской, но, насколько я понимаю, могу проверить, просто работает.
Код: Выделить всё
class Readonly:
_t:int
def __init__(self, t: int):
self._t = t
@property
def t(self) -> int:
return self._t
class Modifyable(Readonly):
def __init__(self, t: int):
super().__init__(t)
@property
def t(self) -> int:
return self._t # can also be super().t
@t.setter
def t(self, t):
self._t = t
def readonly(self) -> Readonly:
return super()
Итак, вот вопрос:
- Может ли это вызвать проблемы (разоблачение супер) прокси-объект вне самого класса)?
- Я тестировал это на Python 3.8.5, но не уверен, что это случайно и противоречит, так сказать, «семантике Python»?
- Есть ли лучший/более желательный способ добиться этого? (Я понятия не имею, стоит ли это вообще двусмысленного сообщения об ошибке, например, в отношении производительности)
Подробнее здесь: https://stackoverflow.com/questions/753 ... turn-super