Type object 'player' has no attribute 'image'

Résolu

Bonjour,

Voici mon code :

from typing import Union
import player as player
import pygame
from pygame import Surface
from pygame.surface import SurfaceType

pygame.init()

class player(pygame.sprite.Sprite):
    def __int__(self):
        super().__init__()
        self.velocity = 5
        self.image = pygame.image.load('assets/joueur 1.png')
        self.rect = self.image.get_rect()

pygame.display.set_caption("nba_2023")

screen: Union[Surface,SurfaceType] = pygame.display.set_mode((1320,720))

background = pygame.image.load('assets/terrain final nba_2023.png')

player = Player()

running = True

while running:
    screen.blit(background,(-49, 40))
    screen.blit(Player.image, Player.rect)
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.QUIT():
            running = False
            pygame.quit()

À chaque fois que je le lance il me dit erreur.
Windows / Edge 115.0.1901.200

3 réponses

  1. Bonjour,

    class player(pygame.sprite.Sprite):
    

    Nom de la classe : player sans majuscule

    player = Player()

    Nom de la classe : Player avec une majuscule 

    Etonnant, non ?

    1. Modérateur

      Bonjour,

      Juste pour préciser ce que dit Phil_1857 : ton erreur vient du fait que tu confonds le nom de la classe (le type) et le nom de l'instance (la variable). Par convention, en python, les noms de variables commencent par une minuscules et les noms de classes commencent par une console.

      Vu que ligne 22, tu écris :

      player = Player()
      • player est un nom d'instance (variable)
      • Player est un nom de classe (type)

      Or si on regarde ligne 9, ta classe est déclarée avec un nom qui commence par une minuscule. Il faut donc corriger cette ligne en :

      class Player:

      Bonne chance

  2. Salut,

    Et le constructeur ne se nomme pas :

    def __int__(self):
    1. Contributeur

      pour commencer, arrête d'utiliser ainsi le nom "player" pour tant d'éléments différents.

      Utilise un autre nom pour ta classe ainsi que pour ta variable

      class personnage(pygame.sprite.Sprite):
      
      
      
      
      
      joueur = Player()