Menu
CoddyTech

Self là đối tượng

Thuộc phần Sprite và hình ảnh trong hành trình Pygame của Coddy. Bài học 12 trên 39.

Một lớp có thể tạo bao nhiêu đối tượng tùy thích, và mỗi đối tượng giữ các thuộc tính riêng. Thêm tham số tốc độ vào __init__, rồi hai ngôi sao có thể rơi với tốc độ khác nhau:

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

Khi bạn viết slow.update(), Python chạy Star.update(slow): self là slow, nên self.y += self.speed khiến slow di chuyển 1 đơn vị. fast.update() chạy cùng những dòng đó với self được đặt thành fast, khiến nó di chuyển 3 đơn vị. Một phương thức, hai đối tượng, và đối tượng này không động đến các con số của đối tượng kia.

Đó là lý do mọi giá trị thuộc về một đối tượng đều cần có self. ở phía trước. Tên không có phần đó, chẳng hạn như speed, là biến cục bộ thông thường của phương thức: nó biến mất khi phương thức kết thúc.

challenge icon

Thử thách

Dễ

Tạo hai ngôi sao rơi với tốc độ riêng.

  1. Thêm tham số thứ ba, speed, vào __init__ và lưu tham số đó vào self.speed.
  2. Thay star bằng slow = Star(200, 0, 1) và fast = Star(440, 0, 3).
  3. Cập nhật và vẽ cả hai ngôi sao trong mỗi khung hình.

Nhấn “Chơi”: hai ngôi sao rơi với tốc độ khác nhau. Sau đó nhấn “Kiểm tra”.

Tự làm thử

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

Tất cả bài học trong Sprite và hình ảnh

Tự luyện tập: Playground Pygame