Python / Создание класса для моего объекта черепаха - PullRequest
0 голосов
/ 19 июня 2020

Я новичок в программировании, и недавно я написал свою первую игру на Python. Это простая игра без какого-либо участия пользователя. Всего 5 черепах, которые движутся слева направо, от 1 до 5 пикселей (используется randint) за один кадр.

Теперь каждая черепаха написана, как показано ниже:

t2 = turtle.Turtle()
t2.penup()
t2.color("Red")
t2.shape("turtle")
t2.setpos(-400,100)
t2.pendown()

I хотел создать для этого класс, но я застрял с этим:

class Trt():
    def __init__(self,color,posit,shape):
        self.object = turtle.Turtle()
        self.penup()
        self.color = color
        self.shape = shape
        self.posit = posit
        self.pendown()


t1 = Trt("Yellow", (-400, 200), "Turtle")

Ошибка, которая появляется, указана ниже. Это заставляет меня думать, что проблема связана с созданием объекта черепахи.

AttributeError: объект 'Trt' не имеет атрибута 'penup'

Заранее большое спасибо!

Рафаль

Ответы [ 2 ]

2 голосов
/ 19 июня 2020

Вы смешиваете две концепции - объекты-члены и наследование классов. Ваш класс Trt может иметь член , который является объектом turtle.Turtle (как вы его реализовали), и тогда вам нужно будет получить доступ ко всем операциям с этим членом через путь члена. Например, перо вверх должно быть:

self.object.penup()

В качестве альтернативы вы можете сделать Trt производным классом от turtle.Turtle. Если вы это сделаете, вы можете получить доступ к функциям перо вверх (а также другим), непосредственно как:

self.penup()

Если вы решите реализовать Trt как производный класс, не забудьте правильно инициализировать объект базового класса, вызвав его метод __init__ из Trt.__init__.

Решение о том, хотите ли вы член объекта или производный класс, зависит от того, является ли класс Trt просто расширенный тип turtle.Turtle - в этом случае он должен быть производным классом или иметь несколько различных функций, которые определяют приоритеты с использованием объекта-члена.

2 голосов
/ 19 июня 2020

сделайте что-то вроде этого:

import turtle

class Trt(turtle.Turtle):
    def __init__(self,color,position,shape):
        super().__init__()
        self.penup()
        self.color(color)
        self.shape(shape)
        self.goto(position)
        self.pendown()

t1 = Trt("Yellow", (-400, 200), "turtle")
...