Что такое состояние объекта в ООП на примере Python?

Ответ

Состояние объекта — это совокупность значений его атрибутов (полей) в конкретный момент времени. Оно определяет, как объект будет реагировать на вызовы его методов и какие данные он хранит.

Изменение состояния происходит, когда методы объекта модифицируют значения его атрибутов.

Пример:

Класс 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), — неизменяемыми.