Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/03/2021, à 18:48

PhenX

Probleme d'argument en python [RESOLU]

Bonjour,

je suis en train d'apprendre le python, et j'ai un petit soucis.
Lorsque je lance le programme il me met :

  File "play.py", line 23, in move
    self.perso_x += self.move_x
AttributeError: 'Perso' object has no attribute 'perso_x'

et je ne comprend pas ou les le probleme.

Voici mon code:

import pygame
import time

pygame.init()

WIDTH = 1020
HEIGHT = 600
perso_standW = 75
perso_standH = 100

surface = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("GameShooter")
background = pygame.image.load("./sprites/background.png").convert()
rect = background.get_rect()
perso_stand = pygame.image.load("./sprites/perso_stand.png")

class Perso:
    def __init__(self, perso_x, perso_y):
        super().__init__()
        move_x = 0
        move_y = 0
    def move(self,perso_x, perso_y):
        self.perso_x += self.move_x

def main():
    clock = pygame.time.Clock()
    game_over = False
    perso_x = 30
    perso_y = 500
    perso = Perso(perso_x,perso_y)
    while not game_over:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    perso.move(5,0)
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_RIGHT:    
                    perso.move(-5,0)

        surface.blit(background,(0,0))
        surface.blit(background,rect)
        surface.blit(perso_stand, (perso_x,perso_y))
        pygame.display.update()
        clock.tick(60)

main()
pygame.quit()
quit()

merci a vous,

Dernière modification par PhenX (Le 27/03/2021, à 16:06)

Hors ligne

#2 Le 26/03/2021, à 19:04

Nuliel

Re : Probleme d'argument en python [RESOLU]

Bonjour,
Tu n'as pas initialisé perso_x, perso_y dans __init__, donc je pense qu'il faut rajouter self.perso_x= perso_x et self.perso_y = perso_y, sinon à quoi sert super() ici?

Dernière modification par Nuliel (Le 26/03/2021, à 19:05)

Hors ligne

#3 Le 26/03/2021, à 20:49

beuguissime

Re : Probleme d'argument en python [RESOLU]

Bonjour,

Même remarque que Nulliel que j'étends à self.move_x et self.move_y (?) qui n'existent pas en l'état.
super().__init__() est inutile ici.

Dernière modification par beuguissime (Le 26/03/2021, à 20:50)

Hors ligne

#4 Le 27/03/2021, à 14:43

PhenX

Re : Probleme d'argument en python [RESOLU]

merci a tout les deux, ca fonctionne du coup !
A vrai dire je nai pas bie  compris a quoi servait super().__init__()

Hors ligne

#5 Le 27/03/2021, à 15:24

Nuliel

Re : Probleme d'argument en python [RESOLU]

Cela ne te sert pas ici vu que tu n'as visiblement qu'une classe. super est utile pour faire de l'héritage: par exemple au lieu de faire des classes Magicien, Guerrier, ... qui contiendront tous la variable point_de_vie, XP ou d'autres, en fait tu peux faire une classe Personnage qui aura ces attributs, et faire hériter Magicien, Guerrier, ... de la classe Personnage afin d'éviter de redéfinir ces variables dans toutes les classes.

Hors ligne

#6 Le 27/03/2021, à 16:05

PhenX

Re : Probleme d'argument en python [RESOLU]

top, merci pour l' explication

Hors ligne