Figuring Out Self

Class yaratganda, siz yaratilgan misollarni kuzatish uchun bir usulga muhtoj bo'lasiz.

SU

selfni Aniqlash

Class yaratganda, siz yaratilgan misollarni kuzatish uchun bir usulga muhtoj bo'lasiz. Misol uchun, agar siz ikkita to'pni noyob xususiyatlar bilan yaratgan bo'lsangiz, ikkinchi to'p ob'ekti birinchi ob'ektni o'chirib yuborishini xohlamaysiz.

Python classlari self argumentidan qaysi misola qaysi ekanligini kuzatish uchun foydalanadi. Agar siz Java yoki Java-ga o'xshash dasturlash tilida dasturlasangiz, ular self argumentini shunday atashadi.

Bu jarayonni amalda ko'rsangiz, tushunish osonroq:

>>> class Ball:
...     def __init__(self, color: str, size: float, weight: float) -> None:
...         self.color = color
...         self.size = size
...         self.weight = weight
...
>>> bowling_ball = Ball('qora', 6, 12)
>>> beach_ball = Ball('qizil', 12, 1)
>>> id(bowling_ball)
4327842432
>>> id(beach_ball)
4327842576

Agar siz class misolining o'rnini bosganingizni tezda aniqlamoqchi bo'lsangiz, misol identifikatorlari (ID) mos kelishini ko'rishingiz mumkin. Bu yerda identifikatorlar farq qilayotganini ko'rsatadi. Bu esa sizda turli ob'ektlar borligini bilishning bir usuli.

Yana bir oson usul – class atributlariga murojaat qilish:

>>> bowling_ball.color
'qora'
>>> beach_ball.color
'qizil'

self aslida misol nomi bilan almashtiriladi. Shunday qilib, bowling_ball ushbu misol uchun self bo'ladi, beach_ball esa o'z misolida selfdir.

Boshqacha qilib aytganda, Python selfni qaysi misola qaysi ekanligini kuzatish uchun ishlatadi.

Agar siz classga usul qo'shsangiz, bu yanada aniqroq bo'ladi. Keling, ball.py nomli fayl yaratamiz va unga quyidagi kodni qo'shamiz:

# ball.py
 
class Ball:
    def __init__(self, color: str, size: float, weight: float, ball_type: str) -> None:
        self.color = color
        self.size = size
        self.weight = weight
        self.ball_type = ball_type
 
    def bounce(self):
        if self.ball_type.lower() == 'bowling':
            print("Bowling to'plari sakray olmaydi!")
        else:
            print(f"{self.ball_type} to'p sakrayapti!")

Siz __init__() ga yangi argument qo'shdingiz, bu esa siz yaratayotgan to'pning turini kuzatishga yordam beradi. Siz shuningdek yangi bounce() usulini ham yaratdingiz.

Keyin siz pastki qismda g'alati ko'rinishdagi if blokiga kod yozdingiz. Agar siz python ball.py ni ishga tushirganda kodni bajarishni xohlasangiz, bu maxsus if bloklariga joylashtirishingiz kerak:

if __name__ == '__main__':
    # bu yerda kod bor

Siz modulni bevosita ishga tushirganingizda, modul nomi __main__ ga o'rnatiladi. Modul nomini maxsus modul atributi, __name__ orqali tekshirishingiz mumkin. Ushbu maxsus sintaksis shuning uchun mavjud. Agar siz ball.py skriptini boshqa Python skriptiga import qilsangiz, nom boshqa narsaga o'rnatiladi, chunki bu endi asosiy modul emas.

Keling, ushbu skriptni ishga tushiramiz. Terminal (yoki Windowsda cmd.exe) oching va ball.py faylini saqlagan papkaga o'ting. Keyin quyidagi buyruqni bajaring:

python ball.py

Bu quyidagi natijani chiqarishi kerak:

Bowling to'plari sakray olmaydi!
Beach to'p sakrayapti!

Sizning kodingiz Python selfni qaysi Ball misoli qaysi ekanligini kuzatish uchun ishlatayotganini ko'rsatadi. bounce() ni chaqirganda, siz misolning ball_type ni self bilan oldindan qo'shib tekshirishingiz mumkin, bu esa self.ball_type ko'rinishida. Biroq, bounce() usulini class tashqarisida chaqirganda, uni misol nomi bilan chaqirasiz. Masalan, ball_one.bounce().

E'tibor bering, self so'zi faqat bir an'anadir, lekin deyarli hamma joyda amal qilinadi. Bu muhim, chunki Python birinchi parametrga berilgan misolni, uning nomi self, inst, this yoki xyz bo'lishidan qat'i nazar, taqdim etadi – ya'ni, agar siz self (yoki sizga ma'qul bo'lgan har qanday yozuv) uchun parametrni belgilashni unutib qo'ysangiz, siz g'alati xatolarga duch kelasiz.

Ushbu sahifada

Xato haqida xabar berish