У меня есть проблема, когда я должен создать простой объектно-ориентированный код, который создает двух черепах, движущихся в противоположных направлениях, но в моем испытании я столкнулся с неизвестными ошибками.
Я попытался инициализировать две переменные turtle1
и turtle2
с помощью self
, потому что я унаследовал Turtle
и s
from turtle import *
class moveOpposite(Turtle):
def __init__(self):
self.setx=0
self.sety=0
def move(self):
turtle1=self
turtle2=self
turtle1.forward(100)
turtle2.forward(-100)
my_turtle=moveOpposite()
my_turtle.move()
Я не использовал self._go
, но моя ошибка говорит, что я сделал так:
self._go(distance)
Я также не использовал self._position
и т. д., но он также говорит, что использовал, и дает мне AttributeError
ende = self._position + self._orient * distance
AttributeError: 'moveOpposite' object has no attribute '_position'
Я бы не стал наследовать от Turtle
, то есть это, в этой ситуации, поскольку ваш объект не черепаха, а пара из них. Вместо этого я бы использовал подход содержит:
from turtle import Screen, Turtle
class Zax(): # a la Dr. Suess
def __init__(self):
self.east_bound = Turtle('turtle')
self.west_bound = Turtle('turtle')
self.west_bound.setheading(180)
def forward(self, distance):
self.east_bound.forward(distance)
self.west_bound.forward(distance)
def right(self, angle):
self.east_bound.right(angle)
self.west_bound.right(angle)
def left(self, angle):
self.east_bound.left(angle)
self.west_bound.left(angle)
screen = Screen()
zaxen = Zax()
zaxen.forward(100)
for _ in range(4):
zaxen.forward(20)
zaxen.right(90)
screen.exitonclick()
После
turtle1=self
иturtle2=self
у вас теперь просто есть три имени для одного объекта черепахи — на самом деле у вас нет ничего созданный. И экземпляры вашего классаmoveOpposite
в любом случае недействительныTurtle
, потому что ваш__init__()
не вызывает унаследованный__init__()
, который выполняет всевозможные необходимые инициализации.