Menu
CoddyTech

self هو الكائن

جزء من قسم الكائنات والصور في رحلة Pygame على Coddy. الدرس 12 من 36.

يمكن لصنف واحد إنشاء أي عدد تريده من الكائنات، ويحتفظ كلٌّ منها بسماته الخاصة. أضف إلى __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، وتحركه بمقدار 3. طريقة واحدة، وكائنان، ولا يغيّر أيٌّ منهما أرقام الآخر.

لهذا السبب، يجب أن تسبق self. كل قيمة يملكها كائن. فالاسم الذي لا تسبقه، مثل speed، هو متغير محلي عادي للطريقة، ويختفي عند انتهائها.

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

جميع دروس الكائنات والصور

تدرّب بنفسك: Playground لـ Pygame