Menu
CoddyTech

Self est l’objet

Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 12 sur 36.

Une classe peut créer autant d’objets que tu le souhaites, et chacun conserve ses propres attributs. Donne à __init__ un paramètre de vitesse, et deux étoiles peuvent tomber à des vitesses différentes :

slow = Star(200, 0, 1)
fast = Star(440, 0, 3)

Quand tu écris slow.update(), Python exécute Star.update(slow) : self correspond à slow, donc self.y += self.speed déplace slow de 1. fast.update() exécute les mêmes lignes avec self défini sur fast, et le déplace de 3. Une méthode, deux objets, et aucun ne touche aux nombres de l’autre.

C’est pourquoi chaque valeur appartenant à un objet doit être précédée de self.. Un nom sans cela, comme speed, est une simple variable locale de la méthode : elle disparaît lorsque la méthode se termine.

challenge icon

Défi

Facile
  1. Ajoutez un troisième paramètre, speed, à __init__ et stockez-le dans self.speed.
  2. Remplacez star par deux étoiles : slow = Star(200, 0, 1) et fast = Star(440, 0, 3).
  3. Mettez à jour et dessinez les deux étoiles à chaque image.

Essayez vous-même

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Falling Star")
clock = pygame.time.Clock()

class Star:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 2

    def update(self):
        self.y += self.speed
        if self.y > 480:
            self.y = 0

    def draw(self, screen):
        pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)


star = Star(320, 0)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    star.update()

    screen.fill((20, 22, 40))
    star.draw(screen)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Toutes les leçons de Sprites et images

Entraînez-vous par vous-même : Playground Pygame