Ответ
Инвариант класса — это логическое условие или набор условий, которые должны оставаться истинными для любого экземпляра класса на протяжении всего его жизненного цикла. Он гарантирует, что объект всегда находится в корректном, согласованном состоянии.
Инвариант должен выполняться после завершения работы конструктора и сохраняться до и после вызова любого публичного метода, который изменяет состояние объекта.
Пример: Класс банковского счета
Инвариант: баланс никогда не может быть отрицательным.
class BankAccount:
def __init__(self, initial_balance: float):
# Проверка инварианта при создании объекта
if initial_balance < 0:
raise ValueError("Initial balance cannot be negative")
self._balance = initial_balance
def withdraw(self, amount: float):
# Проверка условия перед изменением состояния
if self._balance - amount < 0:
raise ValueError("Insufficient funds")
self._balance -= amount
# После выполнения метода инвариант (self._balance >= 0) сохраняется
def get_balance(self) -> float:
return self._balance
Ключевые моменты:
- Гарантия корректности: Инварианты защищают объект от перехода в недопустимое состояние.
- Место проверки: Устанавливается в конструкторе (
__init__
) и поддерживается всеми методами, изменяющими состояние. - Отладка: Нарушение инварианта явно указывает на ошибку в логике класса. В Python для отладки часто используют
assert
для проверки инвариантов.