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.가 없는 이름은 메서드의 일반 지역 변수이며, 메서드가 끝나면 사라집니다.
챌린지
쉬움__init__에 세 번째 매개변수speed를 추가하고, 이를self.speed로 저장하세요.star를 별 두 개로 바꾸세요:slow = Star(200, 0, 1)와fast = Star(440, 0, 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 플레이그라운드