Quand j'appelle la méthode render () dans la classe Zombie, je veux ajouter une instance de l'objet Zombie dans ZombieList.list. Quand j'essaye de faire ça, il dit
Liste de références d'attributs non résolues
pour la classe
ZombieList
.
Dois-je essayer de faire cela d'une autre manière?
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 Réponses :
Il n'y a pas d'attribut list
dans ZombieList
. Une fois que vous avez créé une ZombieList
par ex. self.zombie_list = ZombieList ()
pourrez-vous utiliser votre liste via self.zombie_list.list
.
Même dans ce cas, cependant, j'imagine probablement cela n'est pas le design que vous visez: j'imagine que vous ne voulez pas de ZombieList
pour chaque Zombie
individuel. Au contraire, celui qui initialise les objets Zombie
devrait probablement être également responsable de la maintenance de l'instance ZombieList
.
Vous rencontrerez également d'autres problèmes. Par exemple, la boucle dans
self.list = [] for zombie in self.list: ds.blit(zombie.image, (1000, random.randint(10, 790)))
n'aura jamais d'effet puisque self.list
est toujours vide lorsque ce code est exécuté (puisque vous défini comme étant vide sur la ligne précédente).
Vous ne pouvez pas ajouter à une liste d'une classe. Vous devez ajouter à une instance d'une classe. Par exemple:
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
Vous devez créer un objet ZombieList
, dans lequel vous pouvez ajouter les objets Zombie
.
Vous pouvez ajouter un objets de classe à la classe Zombie code>:
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)