Python'da kontekst menejer (with)
Fayl o’qish darsida with blokini ishlatgandik —
u faylni avtomatik yopardi. Aslida with umumiy mexanizm: u kontekst
menejer deb ataladi. Bu darsda uning ishlashini ochamiz.
Muammo: resursni yopishni unutish
Fayl, tarmoq ulanishi yoki baza — bular ochilgach, yopilishi kerak. Qo’lda yopishni unutish oson:
fayl = open("data.txt")
matn = fayl.read()
# fayl.close() ni unutdik — resurs ochiq qoldi
Ochiq qolgan resurs — muammo manbai: ma’lumot to’liq saqlanmaydi yoki tizim resurslari tugaydi.
Yechim: with bloki
with bloki resursni avtomatik yopadi — hatto ichida xato bo’lsa ham:
Blok tugashi bilan (yoki xato chiqishi bilan) with faylni o’zi yopadi.
Yopishni unutib bo’lmaydi.
O’z kontekst menejeringiz
Klassga __enter__ (kirish) va __exit__ (chiqish) metodlarini qo’shib, uni
with bilan ishlatish mumkin:
Amaliy mashq
with ni sinab ko’ring:
- Faylni
withbilan oching va bir qator yozing; - blokdan chiqqach faylning yopilganini tekshiring;
- xuddi shuni
withsiz qiling vaclose()ni ataylab unuting; __enter__va__exit__metodlari bo’lgan klass yozing;- uni
withbilan ishlatib, ikkala metod qachon chaqirilishini kuzating.
with bloki ichida xato yuz bersa, __exit__ baribir ishlaydimi?
Qisqacha xulosa
- Kontekst menejer resursni avtomatik ochib-yopadi (
withbilan). withblok tugagach resursni o’zi yopadi — xato bo’lganda ham.- Fayl, baza, tarmoq ulanishi uchun ishlatiladi.
- O’z menejerini
__enter__va__exit__metodlari bilan yasash mumkin. withkodni toza va xavfsiz qiladi — yopishni unutib bo’lmaydi.
Keyingi darsda tip izohlari (typing) — kod turlarini aniq ko’rsatishni ko’ramiz.