Isoqjanov Ilyos | Python
🔵 Python: @property — faqat private yoki protected atributlar uchun emas!
Ko‘pchilikda shunday tushuncha bor:
“@property faqat private yoki protected atributlar bilan ishlatiladi.”
Bu — noto‘g‘ri.
Keling, to‘g‘risini tushunamiz👇
🔹 @property aslida nima uchun kerak?
@property ning vazifasi:
• atributni o‘qishda nazorat qilish (getter)
• atributga qiymat berishda nazorat qilish (setter)
• ichki kodni tashqi interfeysdan ajratish (encapsulation)
• API ni chiroyli va pythonic qilish (obj.get_price() o‘rniga obj.price)
Demak, @property — atributni boshqariladigan metodga aylantirish vositasi.
Uning private/protected bilan to‘g‘ridan-to‘g‘ri bog'liq joyi yo‘q.
🔵 Unda nega hamma @property ni private atribut bilan ishlatadi?
Buning muhim texnik sababi bor:
@property
def radius(self):
return self.radius # ❌ cheksiz rekursiya
Atribut va metod nomi bir xil bo'lib qolishi sababli cheksiz rekursiya yuzaga keladi, buni rekursiyani oldini olish uchun ularni nomini ikki xil qilinishi mumkin ya'ni radius atributi protected yoki private ko'rinishida olinishi mumkin:
• _radius (protected)
• __radius (private)
Bu shunchaki rekursiyani oldini olish usuli.
Hech qanday majburiy qoida emas.
🟢 Property private bo‘lmasdan ham ishlaydi
Masalan, hisob-kitobli atribut:
@property
def area(self):
return self.width * self.height
Bu yerda private atribut umuman yo‘q, lekin property juda chiroyli ishlayapti.
🟣 Yoki faqat o‘qiladigan atribut:
@property
def info(self):
return "User info"
Bu ham private atribut bo'lishini talab qilmaydi.
🟡 Xulosa (eng muhim)
@property — bu private atributlar uchun yaratilgan mexanizm emas.
Uning vazifasi: atributga o‘xshash interfeys orqali boshqariladigan metod yaratish.
Private/protected atributlar esa shunchaki:
• ichki qiymatni ajratish
• rekursiyani oldini olish
• inkapsulyatsiyani yaxshilash
uchun odatiy amaliyot xolos.
🟥 Qachon ishlatmaslik kerak?
❌ Juda katta va og‘ir hisob-kitob property ichida bo‘lsa
❌ Noaniq side effect bo‘lsa
❌ Atribut nomi orqali metod chaqirilayotganini yashirish zarar bo‘lsa
Bunday hollarda odatiy metod ishlatgan ma’qul.
3 · 839 ·