Глава 14 · Создаём объекты реального мира

Мини-проект: Player

Модель игрока с очками здоровья и счётом — первый самостоятельный класс главы.

Мини-проект: Player

Соберём всё из разделов 14.1-14.8 в один настоящий класс — модель игрока с очками здоровья и счётом:

player.py
class Player:
    def __init__(self, name, health=100):
        self.name = name
        self.health = health
        self.score = 0

    def take_damage(self, amount):
        self.health -= amount
        if self.health < 0:
            self.health = 0

    def heal(self, amount):
        self.health += amount
        if self.health > 100:
            self.health = 100

    def add_score(self, points):
        self.score += points
Playernamehealthscoretake_damage(amount)heal(amount)add_score(points)
Класс Player
dva_igroka.py
anna = Player("Anna")
bob = Player("Bob")
anna.take_damage(30)
anna.add_score(10)

print(anna.health, anna.score)   # 70 10
print(bob.health, bob.score)     # 100 0 — bob не пострадал
anna : Playername = 'Anna'health = 70score = 10
anna — своё состояние
bob : Playername = 'Bob'health = 100score = 0
bob — не затронут действиями anna
Debug Lab 4: == сравнивает не значения, а сами объекты
sravnenie_igrokov.py
a1 = Player("Anna")
a2 = Player("Anna")   # те же имя, здоровье и счёт, что у a1

print(a1 == a2)
>>> print(a1 == a2)
False
Что видно на экране

Хотя у a1 и a2 одинаковые значения ВСЕХ атрибутов, == по умолчанию сравнивает объекты по идентичности — это два РАЗНЫХ объекта в памяти, поэтому результат False, даже если содержимое совпадает полностью. Чтобы == сравнивал значения, классу нужен специальный метод __eq__ — дойдём до него в разделе 14.21.

Исправленный код
sravnenie_cherez_pole.py
# Пока сравниваем нужные поля вручную:
print(a1.name == a2.name and a1.health == a2.health)
★★ Самостоятельная задача
is_alive

Добавьте классу Player метод is_alive(self), возвращающий True, если health больше 0, и False иначе.

Практика: класс Player
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →