Неразрешенная ссылка на атрибут '...' для класса '...' - PullRequest
2 голосов
/ 29 марта 2019

Когда я вызываю метод render () в классе Zombie, я хочу добавить экземпляр объекта Zombie в ZombieList.list.Когда я пытаюсь это сделать, выдается

Неразрешенная ссылка на атрибут list для класса ZombieList.

Стоит ли пытаться сделать это по-другому?

class ZombieList:
    def __init__(self):
        self.list = []
        for zombie in self.list:
            ds.blit(zombie.image, (1000, random.randint(10, 790)))

class Zombie(object):
    def __init__(self):
        self.attack = 3
        self.speed = 5
        self.health = 30
        self.image = pygame.image.load("Assets/green zombie.png")

        self.zombieList = []

    def render(self):
        ZombieList.list.append(self)

Ответы [ 3 ]

1 голос
/ 29 марта 2019

Вам необходимо создать объект ZombieList, к которому можно добавить объекты Zombie.
Вы можете добавить Объекты класса к классу Zombie:

class Zombie(object):

    zombies = ZombieList()

    def __init__(self):
        self.attack = 3
        self.speed = 5
        self.health = 30
        self.image = pygame.image.load("Assets/green zombie.png")

    def render(self):
        Zombie.zombies.list.append(self)
0 голосов
/ 29 марта 2019

Вы не можете добавить в список класса.Вам необходимо добавить к экземпляр класса.Например:

class ZombieList:
    def __init__(self):
        self.list = []
        for zombie in self.list:
            ds.blit(zombie.image, (1000, random.randint(10, 790)))

my_zombie_list = ZombieList() # create an instance

class Zombie(object):
    def __init__(self):
        self.attack = 3
        self.speed = 5
        self.health = 30
        self.image = pygame.image.load("Assets/green zombie.png")

        self.zombieList = []

    def render(self):
        my_zombie_list.list.append(self) # refer to the previously created instance
0 голосов
/ 29 марта 2019

Нет атрибута list в ZombieList.Только после того, как вы создали ZombieList через, например, self.zombie_list = ZombieList(), вы сможете использовать свой список через self.zombie_list.list.

Даже тогда, хотя, я думаю, это, вероятно, не дизайнВы стремитесь к: Я полагаю, что вы не хотите ZombieList для каждого человека Zombie.Скорее, тот, кто инициализирует объекты Zombie, вероятно, также должен отвечать за поддержание экземпляра ZombieList.

Вы также столкнетесь с другими проблемами.Например, цикл в

self.list = []
for zombie in self.list:
    ds.blit(zombie.image, (1000, random.randint(10, 790)))

никогда не будет иметь никакого эффекта, поскольку self.list всегда пуст при выполнении этого кода (поскольку вы определили его как пустое в предыдущей строке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...