Глава 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
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 не пострадал
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, без установки