Python da ba'zi metodlar ikki tomonlama pastki chiziq bilan yoziladi: __init__, __str__ va boshqalar. Ular dunder metodlar (dunder methods) deyiladi — "double underscore" so'zidan olingan.
Dunder metodlar — Python o'zi ma'lum holatlarda avtomatik chaqiradigan maxsus metodlar. Ularni siz to'g'ridan-to'g'ri chaqirmaysiz — Python o'zi chaqiradi.
Masalan, __init__ dan allaqachon foydalanganmiz — u obyekt yaratilganda avtomatik chaqiriladi. __str__ esa print() chaqirilganda avtomatik ishga tushadi.
Asosiy dunder metodlari:
class Kitob:
def __init__(self, nomi, sahifalar):
# Obyekt yaratilganda chaqiriladi
self.nomi = nomi
self.sahifalar = sahifalar
def __str__(self):
# print(kitob) yoki str(kitob) chaqirilganda
return f"Kitob: {self.nomi} ({self.sahifalar} sahifa)"
def __len__(self):
# len(kitob) chaqirilganda
return self.sahifalar
def __eq__(self, boshqa):
# kitob1 == kitob2 chaqirilganda
return self.nomi == boshqa.nomi
def __add__(self, boshqa):
# kitob1 + kitob2 chaqirilganda
return Kitob(f"{self.nomi} + {boshqa.nomi}", self.sahifalar + boshqa.sahifalar)
k1 = Kitob("Python", 300)
k2 = Kitob("OOP", 250)
print(k1) # Kitob: Python (300 sahifa) — __str__ chaqirildi
print(len(k1)) # 300 — __len__ chaqirildi
print(k1 == k2) # False — __eq__ chaqirildi
k3 = k1 + k2 # __add__ chaqirildi
print(k3) # Kitob: Python + OOP (550 sahifa)Har bir dunder metod muayyan Python operatori yoki funksiyasiga mos keladi:
| Dunder metod | Qachon chaqiriladi |
|---|---|
__init__ | Kitob(...) — obyekt yaratish |
__str__ | print(k) yoki str(k) |
__len__ | len(k) |
__eq__ | k1 == k2 |
__add__ | k1 + k2 |
Dunder metodlar sizning klasslaringizni Python ning o'rnatilgan turlari kabi ishlashiga imkon beradi. len([1,2,3]) ishlasa — len(k1) ham ishlashi mumkin!
Muhim qoidalar:
__ bilan yoziladi__init__ — yaratish, __str__ — ko'rsatish, __len__ — uzunlik, __eq__ — tenglik, __add__ — qo'shishDunder metodlarni tekshirish
Quyidagi savollarga javob bering va maxsus metodlar haqida bilimingizni mustahkamlang:
print(obj) chaqirilganda qaysi dunder metod ishga tushishini aniqlanglen(obj) chaqirilganda qaysi dunder metod ishlatilishini toping+ operatorini klasslarda ishlatish uchun qaysi dunder metod yozilishi kerakligini aniqlang