【问题标题】:Python / Creating a class for my turtle objectPython / 为我的海龟对象创建一个类
【发布时间】:2020-06-19 12:33:18
【问题描述】:

我是编程新手,最近我用 Python 编写了我的第一个游戏。这是一个没有任何用户输入的简单游戏。只有 5 只海龟在单帧从左向右移动,像素从 1 像素变为 5 像素(使用 randint)。

现在每只海龟的写法如下所示:

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

我想为此创建一个类,但我坚持这样做:

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'

提前非常感谢!

拉法尔

【问题讨论】:

  • 扩展 Turtle。 class Trt(turtle.Turtle):
  • 我试过了,但是出现了另一个错误:AttributeError: 'Trt' object has no attribute '_drawing'
  • self.object = turtle.Turtle() ??
  • 初始化超类
  • 能不能也附上超类?

标签: python python-turtle


【解决方案1】:

做这样的事情:

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")

【讨论】:

    【解决方案2】:

    您混淆了两个概念——成员对象和类继承。您的Trt 类可以有一个member,它是一个turtle.Turtle 对象(正如您实现的那样),然后您需要通过成员路径访问该成员上的所有操作。例如,提笔需要:

    self.object.penup()
    

    或者,您可以使Trt 成为turtle.Turtle 的派生类。如果你这样做了,你可以直接访问上笔功能(以及其他功能):

    self.penup()
    

    如果您选择将Trt 实现为派生类,请不要忘记通过在Trt.__init__ 中调用其__init__ 方法来正确初始化基类对象。

    根据Trt 类是否只是turtle.Turtle 的增强类型来决定您需要对象成员还是派生类 - 在这种情况下,它应该是派生类,或者具有多个不同的功能,哪个工厂优先使用成员对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多