Instance atributlar har bir obyektning o'ziga xos ma'lumotlari edi. Klass atributlari esa barcha obyektlar uchun umumiy — bitta nusxa bo'ladi va hamma birga foydalanadi.
Klass atributlari __init__ ichida emas, bevosita klass ichida e'lon qilinadi:
class Talaba:
soni = 0 # klass atributi — barcha talabalar uchun umumiy
def __init__(self, ism):
self.ism = ism # instance atribut — har birida alohida
Talaba.soni += 1 # klass atributini yangilash
t1 = Talaba("Ali")
t2 = Talaba("Vali")
t3 = Talaba("Sarvar")
print(Talaba.soni) # 3 — barcha obyektlar hisobga olindi
print(t1.ism) # Ali
print(t2.ism) # ValiHar safar yangi Talaba yaratilganda Talaba.soni bittaga oshadi. Bu qiymat barcha obyektlar uchun umumiy.
Klass atributiga ham Klass.atribut, ham obyekt.atribut orqali murojaat mumkin:
class Avtomobil:
g_ildiraklar_soni = 4 # barcha avtomobillar uchun umumiy
a1 = Avtomobil()
a2 = Avtomobil()
print(Avtomobil.g_ildiraklar_soni) # 4
print(a1.g_ildiraklar_soni) # 4 — bir xil qiymat
print(a2.g_ildiraklar_soni) # 4 — bir xil qiymatInstance va klass atributini farqlash muhim:
| Instance atribut | Klass atributi | |
|---|---|---|
| E'lon joyi | __init__ ichida | Klass ichida, __init__ tashqarisida |
| Murojaat | self.atribut | KlassNomi.atribut |
| Kim uchun | Faqat shu obyekt | Barcha obyektlar |
Muhim qoidalar:
__init__ dan tashqarida, klass ichida yoziladiKlassNomi.atribut orqali murojaat qilinadiKlass va instance atributlarni farqlash
Quyidagi savollarga javob bering va atribut turlarini mustahkamlang: