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

Гонка Turtle с объектами

Переписываем гонку из главы 12 с собственным классом — и впервые видим композицию в деле.

Вернёмся к гонке черепашек из главы 12 — на этот раз обернём каждого участника в свой собственный класс, а не просто в объект turtle.Turtle напрямую.

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()
Результат выполнения
Четыре черепашки разных цветов на финише гонки, каждая — отдельный объект класса Uchastnik
Четыре объекта Uchastnik — независимое состояние, общий класс
Зачем оборачивать Turtle в свой класс?
В главе 12 логика гонки (движение, проверка финиша) была разбросана по основному коду. Теперь каждый участник — самостоятельный объект Uchastnik, который сам знает, как сделать шаг и как проверить, финишировал ли он. Обратите внимание: Uchastnik не является черепашкой — он ХРАНИТ черепашку в атрибуте self.t. Это называется композицией — формально разберём её в разделе 14.13.
Uchastnikturtle.TurtleHAS-A
Uchastnik ХРАНИТ объект turtle.Turtle — а не является им
★★★ Задача повышенной сложности
Счёт очков

Добавьте классу Uchastnik атрибут ochki и метод nabrat_ochki(n), увеличивающий счёт — начислите очки победителю в конце гонки.

Практика: гонка Turtle с объектами
Модуль turtle открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →