Isoqjanov Ilyos | Python
🔥 Obyekt class atributini o‘zgartirsa nima bo‘ladi?
👉 Ko‘pchilik o‘ylagandek, obyekt orqali class atributiga qiymat bersangiz, class atributi o‘zgarmaydi.
Aksincha, Python obyektga yangi atribut yaratadi. Ya'ni bu nomdagi atribut endi ham class da ham obyektda bor bo'ladi va ular boshqa boshqa.
📌 Nega shunday?
Pythonda agar obyektdan biror atribut qiymatini olmoqchi bo'lsak, atributni qidirish tartibi quyidagicha bo'ladi:
1️⃣ Avval obyekt ichida (self.dict) qidiradi (topsa shu qiymatni qaytaradi va qidiruv to'xtaydi)
2️⃣ Topilmasa — class ichidan (Class.dict) ushbu atributni qidiradi va qaytaradi
Misol:
class A:
x = 10 # sinf atributi
a1 = A()
a2 = A()
a1.x = 99 # obyekt orqali qiymat berildi
print(a1.x) # 99 → obyekt atributi
print(a2.x) # 10 → sinf atributi o'zgarmadi
print(A.x) # 10 → sinf atributi o'zgarmadi
Yuqoridagi kodda a1.x = 99 orqali xuddiki biz class atributi x ni o'zgartiryapmiz, lekin aslida unday emas. Bu holda obyekt o'ziga yangi x atribut yaratadi va shu yangi atributga 99 qiymatini beradi, Class atributi x esa o'zgarishsiz qoladi.
🧐 Xulosa:
Class atributini obyekt orqali obyekt atributini o'zgartirganday o'zgartirib bo'lmaydi, chunki u klassga tegishli narsa. Uni faqat class ni o'zi orqali yoki obyekt tomonidan @classmethod yordamida o'zgartirilishi mumkin xalos. Lekin shuni inobatga olish kerak agar obyekt class ga tegishli atributni @classmethod yordamida yaratilgan metod orqali o'zgartirsa bu o'zgarish ushbu class dan yaratilgan hamma obyektlarga ta'sirini o'tkazadi.
1 · 929 ·