Isoqjanov Ilyos | Python
🐍 Pythonda Name Mangling nima?
Pythonda double underscore (__) bilan boshlanadigan atribut va metodlar tashqaridan bevosita ko‘rinmas bo‘lishi uchun avtomatik ravishda o‘zgartiriladi.
Bu mexanizm name mangling deb ataladi.
Python ichida atribut nomi quyidagicha o‘zgartiriladi:
__attr → _ClassName__attr
Shu sababli class tashqarisidan __attr ga to‘g‘ridan-to‘g‘ri murojaat qilib bo‘lmaydi.
📌 Misol
class MyClass:
def __init__(self):
self.__private_var = 42 # double underscore
obj = MyClass()
# print(obj.__private_var) # ❌ AttributeError
print(obj._MyClass__private_var) # ✅ 42
🧠 Izoh
• Python bu orqali atributni tasodifan tashqaridan o‘zgartirib yuborishdan himoya qiladi
• Bu haqiqiy private emas, lekin accidental overwrite ni oldini oladi
• Name mangling asosan inheritance vaqtida foydali
🔍 Single underscore vs Double underscore
• _var —> obj._var kabi murojat qilinadi, oddiy protected attribut sifatida ishlatiladi.
• __var —> obj._ClassName__var kabi murojat qilinadi, chunki name mangling mavjud, murakkabroq
Eslatma: Yana bir qiziq tomoni biz odatda obyektning attributi bilan ishlash uchun ishlatadigan hasattr(), getattr() va setattr() ni __var kabi attributlar bilan ishlata olmaymiz. Chunki ular pythonning ichki mexanizmida name mangling tufayli obj._ClassName__var kabi saqlangan bo'ladi.
📌 Qt signal-slot, getattr/setattr, threadlar bilan ishlaganda
_var ishlatish ancha qulay.
🧩 Name Mangling bo‘yicha xulosa
• Pythondagi encapsulation mexanizmi
• Inheritance paytida nomlar to‘qnashuvini oldini oladi
• __var ni faqat haqiqatan ichki bo‘lishi kerak bo‘lgan atributlar uchun ishlatish kerak
• Aksariyat holatlarda single underscore (_var) yetarli
4 · 1.3K ·