Как решить «Ошибка атрибута» в классах для атрибутов экземпляра? - PullRequest
0 голосов
/ 25 апреля 2019

Моя домашняя работа должна писать функции в двух классах (Персона и Мир), и я почти уверен, что мой код правильный.Тем не менее,

"AttributeError: объект" World "не имеет атрибута" destination ""

продолжает появляться, когда self.destination существует только в классе Person.

Кажется, что слово «я» теперь относится к Мировому классу, и я не могу понять, почему.

class Person:
    def __init__(self, world_size):
        self.world_size = world_size
        self.radius = 7
        self.location = turtle.position()#this cause attribute error
        self.destination = self._get_random_location()#and this causes too

    #moves person towards the destination
    def move(self):
        turtle.setheading(turtle.towards(self.destination))
        turtle.forward(self.radius/2)

Должен ли я заменить слово «я» другими словами для класса Person?Если да, то как я могу это сделать?


class World:
    def __init__(self, width, height, n):
        self.size = (width, height)
        self.hours = 0
        self.people = []
        self.add_person()

    #everything involve of Person class in World class
    #add a person to the list
    def add_person(self):
        person = Person(1)
        self.people.append(person)

    def simulate(self):
        self.hours += 1
        Person.update(self)

    def draw(self):
        p = Person(self)
        p.draw()

**

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\ \AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "C:\Users\ \AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 746, in callit
    func(*args)
  File "C:\Users\Desktop\VIRUS_PART_A.py", line 261, in __animation_loop
    self.tick()
  File "C:\Users\Desktop\VIRUS_PART_A.py", line 216, in next_turn
    self.world.simulate()
  File "C:\Users\Desktop\VIRUS_PART_A.py", line 124, in simulate
    Person.update(self)
  File "C:\Users\Desktop\VIRUS_PART_A.py", line 71, in update
    Person.move(self)
  File "C:\Users\Desktop\VIRUS_PART_A.py", line 79, in move
    turtle.setheading(turtle.towards(self.destination))
AttributeError: 'World' object has no attribute 'destination'

**

1 Ответ

0 голосов
/ 25 апреля 2019

У вас есть Персона в списке self.people, поэтому вы должны использовать этот список в цикле

def simulate(self):
    self.hours += 1
    for item in self.people:
        item.update(self)

def draw(self):
    for item in self.people:
        item.draw()

Возможно, в Person вы используете Person.move(), но вы должны использовать self.move() или что-то подобное.

...