Rozdział 14 · Tworzenie rzeczywistych obiektów

Turtle Rasa Obiektów

Przerabianie rasy z rozdziału 12 z własną klasą i zobaczenie kompozycji w akcji po raz pierwszy.

Powrót do wyścigu żółwi z rozdziału 12, tym razem każdy uczestnik otula go własnym własna klasa, nie tylko turtle.Turtle bezpośrednio.

gonka_s_klassom.py
import turtle
import random

random.seed(5)
screen = turtle.Screen()
screen.setup(500, 400)

class Uchastnik:
    def __init__(self, cvet, startovyj_y):
        self.t = turtle.Turtle()
        self.t.shape("turtle")
        self.t.color(cvet)
        self.t.penup()
        self.t.goto(-200, startovyj_y)
        self.cvet = cvet

    def sdelat_shag(self):
        self.t.forward(random.randint(1, 10))

    def finishiroval(self, finish_line):
        return self.t.xcor() >= finish_line

cveta = ["red", "blue", "green", "orange"]
uchastniki = [Uchastnik(cvet, i * 40 - 60) for i, cvet in enumerate(cveta)]

pobeditel = None
while pobeditel is None:
    for u in uchastniki:
        u.sdelat_shag()
        if u.finishiroval(200):
            pobeditel = u.cvet
            break

screen.exitonclick()
Rezultat
Cztery żółwie różnych kolorów na mecie wyścigu, każdy będący osobnym obiektem klasy Uchastnik
Cztery obiekty Uchastnik — niezależny stan, wspólna klasa
Po co owijac Turtle w własną klasę?
W rozdziale 12 logika wyścigu (ruch, kontrola mety) została rozproszona po całym głównym kodzie. Teraz każdy uczestnik jest niezależnym obiektem Uchastnikkto wie, jak wykonać ruch i sprawdzić, czy skończył. Proszę zauważyć: Uchastnik nie jest żółwiem — przechowuje żółwia w atrybucie self.t. To nazywa się skład — formalnie omówimy ją w rozdziale 14.13.
Uchastnikturtle.TurtleHAS-A
Uchastnik PRZECHOWUJE obiekt turtle.Turtle — a nie jest nim
Challenge
Punktacja

Dodaj atrybut ochki do Uchastnik klasy oraz metodę zwiększającą wynik nabrat_ochki(n), aby przyznawać punkty zwycięzcy na koniec wyścigu.

Praktyka: wyścig Turtle z obiektami
Moduł turtle otwiera natywne okno Python – uruchamiane lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie
Otwórz praktykę →