#python #pygame #pycharm
#python #pygame #pycharm
Вопрос:
Когда я вызываю метод 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)
Ответ №1:
Вы должны создать 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)
Ответ №2:
Вы не можете добавить к списку класса. Вам нужно добавить к экземпляру класса. Например:
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
Ответ №3:
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
всегда пусто при выполнении этого кода (поскольку вы определили его как пустой в предыдущей строке).