3
votes

Référence d'attribut non résolue '...' pour la classe '...'

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)


0 commentaires

3 Réponses :


0
votes

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).


0 commentaires

0
votes

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


0 commentaires

1
votes

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)


0 commentaires