Menu
CoddyTech

self는 객체다

Coddy Pygame 여정의 스프라이트와 이미지 섹션에 포함된 레슨. 36개 중 12번째.

클래스 하나로 원하는 만큼 객체를 만들 수 있으며, 각 객체는 고유한 속성을 유지합니다. __init__에 속도 매개변수를 추가하면 두 별이 서로 다른 속도로 떨어질 수 있습니다.

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

slow.update()를 작성하면 Python은 Star.update(slow)를 실행합니다. self는 slow이므로 self.y += self.speed는 slow를 1만큼 이동시킵니다. fast.update()는 self가 fast로 설정된 상태에서 같은 줄을 실행하고, fast를 3만큼 이동시킵니다. 메서드 하나와 객체 두 개이며, 어느 쪽도 다른 쪽의 숫자를 건드리지 않습니다.

그래서 객체가 소유하는 모든 값 앞에는 self.가 필요합니다. speed처럼 self.가 없는 이름은 메서드의 일반 지역 변수이며, 메서드가 끝나면 사라집니다.

challenge icon

챌린지

쉬움
  1. __init__에 세 번째 매개변수 speed를 추가하고, 이를 self.speed로 저장하세요.
  2. star를 별 두 개로 바꾸세요: slow = Star(200, 0, 1)와 fast = Star(440, 0, 3).
  3. 매 프레임 두 별을 모두 업데이트하고 그리세요.

직접 해보기

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

스프라이트와 이미지의 모든 레슨

직접 연습해 보세요: Pygame 플레이그라운드