Ответ
Состояние объекта — это совокупность значений его атрибутов (полей) в конкретный момент времени. Оно определяет, как объект будет реагировать на вызовы его методов и какие данные он хранит.
Изменение состояния происходит, когда методы объекта модифицируют значения его атрибутов.
Пример:
Класс BankAccount
имеет состояние, определяемое атрибутом balance
. Методы deposit
и withdraw
изменяют это состояние.
class BankAccount:
def __init__(self, owner: str, balance: float = 0.0):
# Атрибуты, определяющие состояние объекта
self.owner = owner
self.balance = balance
def deposit(self, amount: float):
"""Увеличивает баланс, изменяя состояние."""
if amount > 0:
self.balance += amount
print(f"Deposited ${amount:.2f}. New balance: ${self.balance:.2f}")
def withdraw(self, amount: float):
"""Уменьшает баланс, изменяя состояние."""
if 0 < amount <= self.balance:
self.balance -= amount
print(f"Withdrew ${amount:.2f}. New balance: ${self.balance:.2f}")
else:
print("Insufficient funds.")
# Создание объекта с начальным состоянием
account = BankAccount(owner="John Doe", balance=100.0)
print(f"Initial state: balance is ${account.balance:.2f}")
# Вызов методов, которые изменяют состояние
account.deposit(50.0)
account.withdraw(30.0)
# Конечное состояние объекта
print(f"Final state: balance is ${account.balance:.2f}")
Ключевые аспекты:
- Инкапсуляция: Состояние объекта должно быть скрыто от прямого доступа извне. Управлять им следует через публичные методы, что обеспечивает целостность данных.
- Изменяемое (Mutable) vs. Неизменяемое (Immutable): Объекты, чьё состояние можно изменить после создания (как
list
или нашBankAccount
), называются изменяемыми. Объекты, чьё состояние зафиксировано (какtuple
илиstr
), — неизменяемыми.