скрыть прямой доступ к внутренним полям, таким как _field;
предоставить контролируемый API с помощью методов или @property;
проверять инварианты в логике установки.
Пример
classTemperature:
def__init__(self, celsius: float) -> None:
self.celsius = celsius
@propertydefcelsius(self) -> float:
returnself._celsius
@celsius.setterdefcelsius(self, value: float) -> None:
if value < -273.15:
raise ValueError("invalid temperature")
self._celsius = value
Разбор
Суммируя:
Абстракция данных защищает инварианты объектов.
property обеспечивает контролируемый доступ к состоянию.
Внутренние детали могут меняться без изменения API.
Итог
Подход: - скрыть прямой доступ к внутренним полям, таким как _field; - предоставлять контролируемый API через методы или @property; - проверять инварианты в логике установки.