-2

我正在尝试进行海龟比赛,但我收到一个错误,即“海龟”类没有“前进”属性。这是我的代码:

class turtles:   
    def __init__(self, color, posX):
        self = turtle.Turtle(shape='turtle', visible=False)
        self.color(color)
        self.penup()
        self.shape('turtle')
        self.goto(posX, -300)
        self.showturtle()
        self.setheading(90)
    def start_race(self):
        self.forward(random.randrange(0,10))

t1 = turtles('red',-150)
t2 = turtles('orange', -100)
t3 = turtles('yellow',-50)
t4 = turtles('green', 0)
t5 = turtles('light blue', 50)
t6 = turtles('blue',100)
t7 = turtles('purple', 150)

def begin_race():
    t1.start_race()
    t2.start_race()
    t3.start_race()
    t4.start_race()
    t5.start_race()
    t6.start_race()
    t7.start_race()

begin_race()
4

2 回答 2

0

用这个替换你的turtles类:

class turtles(turtle.Turtle):   
    def __init__(self, color, posX):
        self.color(color)
        self.penup()
        self.shape('turtle')
        self.goto(posX, -300)
        self.showturtle()
        self.setheading(90)
    def start_race(self):
        self.forward(random.randrange(0,10))

Python 中的继承是通过在声明类名后在括号中指定一个类来完成的。
在这种情况下,您的turtles类从该类继承turtle.Turtle,然后更改其属性。似乎在指定海龟的颜色和可见性方面也有一些重复(我为你删除了)

于 2020-04-24T08:22:19.930 回答
0

您收到此错误的原因是因为forward您的turtles类中没有调用属性(即变量或方法)。该forward方法是turtle.Turtle类的一部分。你可以用不同的方式解决这个问题:

方法一:使用继承

您可以turtles从现有类派生您的turtle.Turtle类。为此,您应该进行以下更改:

  • 该类turtles应定义为class turtles(turtle.Turtle)从它派生。
  • 在该__init__()方法中,您不应该重新分配self,因为这是对正在初始化的实际对象的引用。
  • 您应该调用__init__()原始Turtle类的方法。

所以完整的代码可能如下所示。我重命名为start_race()advance_race()因为这更好地描述了它的作用。我添加了一个无限循环,所以你会看到海龟“赛跑”。当然,这只是为了演示。

import random
import turtle

class turtles(turtle.Turtle):

    def __init__(self, color, posX):
        super().__init__(shape='turtle', visible=False)
        self.color(color)
        self.penup()
        self.goto(posX, -300)
        self.showturtle()
        self.setheading(90)

    def advance_race(self):
        self.forward(random.randrange(0,10))

t1 = turtles('red', -150)
t2 = turtles('orange', -100)
t3 = turtles('yellow', -50)
t4 = turtles('green', 0)
t5 = turtles('light blue', 50)
t6 = turtles('blue', 100)
t7 = turtles('purple', 150)

while True:
    t1.advance_race()
    t2.advance_race()
    t3.advance_race()
    t4.advance_race()
    t5.advance_race()
    t6.advance_race()
    t7.advance_race()

方法2:使用包装类

或者,您可以创建一个“持有”海龟对象的新类。使用此方法,您应该将海龟存储在“内部”self并以self.turtle(或任何其他名称)访问它。

class turtles:

    def __init__(self, color, posX):
        self.turtle = turtle.Turtle(shape='turtle', visible=False)
        self.turtle.color(color)
        self.turtle.penup()
        self.turtle.goto(posX, -300)
        self.turtle.showturtle()
        self.turtle.setheading(90)

    def advance_race(self):
        self.turtle.forward(random.randrange(0,10))

(其余代码同上)

于 2020-08-10T20:12:42.993 回答