Rozdział 14 · Tworzenie rzeczywistych obiektów
Mini-projekt: Player
Model Gracza z punktami zdrowia i wynikiem to pierwsza niezależna klasa rozdziału.
Mini-projekt: Player
Zbierzmy wszystko z sekcji 14.1-14.8 w jedną prawdziwą klasę, Model Gracza z Punktami Zdrowie i liczenie:
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 nie ucierpiał
Debug Lab 4: == porównuje nie wartości, lecz same obiekty
sravnenie_igrokov.py
a1 = Player("Anna")
a2 = Player("Anna") # to samo imię, zdrowie i wynik co a1
print(a1 == a2)
>>> print(a1 == a2)
False
Chociaż a1 oraz a2 tych samych wartości WSZYSTKICH atrybutów, == domyślnie porównuje obiekty przez tożsamość — to dwa RÓŻNE obiekty w pamięci, dlatego wynik Falsenawet jeśli zawartość całkowicie się zgadza. To == porównywanych wartościach klasa wymaga specjalnej metody __eq__ — do tego przejdziemy w sekcji 14.21.
Poprawiony kod
sravnenie_cherez_pole.py
# Na razie porównujemy potrzebne pola ręcznie:
print(a1.name == a2.name and a1.health == a2.health)
★★ Zadanie samodzielne
is_alive
Dodaj metodę is_alive(self) do klasy Player, która zwraca True, jeśli health jest większa niż 0, a False w przeciwnym razie.
Praktyka: Klasa Player
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji