🧩 Pythonda Multiple Inheritance — “Ko‘p meros olish” haqida?
OOPda (Obyektga yo‘naltirilgan dasturlashda) multiple inheritance degani —
bitta klass bir vaqtning o‘zida bir nechta ota-klasslardan (parent class) meros olishi mumkin degani.
👨🏫 Oddiy misol:
📤 Natija:
🧠 Fikr:
Multiple inheritance — bir obyektga bir nechta “rol” yoki “xususiyat” berish imkonini beradi.
Masalan, 🦆 o‘rdak uchadi ham, suzadi ham — demak u Flyable va Swimmable sinflaridan meros oladi.
⚠️ Ehtiyot bo‘ling!!!
Multiple inheritanceda “diamond problem” paydo bo‘lishi mumkin:
ya’ni bir xil nomdagi metod bir nechta ota klassda mavjud bo‘lsa — Python MRO (Method Resolution Order) qoidasi bo‘yicha birinchi topilganini ishlatadi.
Tartibni tekshirish uchun:
✅ Xulosa:
• Kodni qayta ishlatish osonlashadi
• MRO metod tartibini hal qiladi
• super() yordamida ota klasslar metodlarini chaqirish mumkin
• Juda qulay, lekin ehtiyotkorlik bilan foydalaning 😉
OOPda (Obyektga yo‘naltirilgan dasturlashda) multiple inheritance degani —
bitta klass bir vaqtning o‘zida bir nechta ota-klasslardan (parent class) meros olishi mumkin degani.
👨🏫 Oddiy misol:
class A:
def feature_a(self):
print("A sinfidagi funksiya")
class B:
def feature_b(self):
print("B sinfidagi funksiya")
class C(A, B): # 👉 A va B dan meros olayapti
def feature_c(self):
print("C sinfidagi funksiya")
obj = C()
obj.feature_a()
obj.feature_b()
📤 Natija:
A sinfidagi funksiya
B sinfidagi funksiya
🧠 Fikr:
Multiple inheritance — bir obyektga bir nechta “rol” yoki “xususiyat” berish imkonini beradi.
Masalan, 🦆 o‘rdak uchadi ham, suzadi ham — demak u Flyable va Swimmable sinflaridan meros oladi.
⚠️ Ehtiyot bo‘ling!!!
Multiple inheritanceda “diamond problem” paydo bo‘lishi mumkin:
ya’ni bir xil nomdagi metod bir nechta ota klassda mavjud bo‘lsa — Python MRO (Method Resolution Order) qoidasi bo‘yicha birinchi topilganini ishlatadi.
Tartibni tekshirish uchun:
print(C.mro())
✅ Xulosa:
• Kodni qayta ishlatish osonlashadi
• MRO metod tartibini hal qiladi
• super() yordamida ota klasslar metodlarini chaqirish mumkin
• Juda qulay, lekin ehtiyotkorlik bilan foydalaning 😉
🔥2❤1👍1
💻 DRY Prinsipi: Kodingizni 50% qisqartiring!
"Don't Repeat Yourself" — Senior dasturchilar bu qoidani tushida ham eslab turadi 😴
Savol: Siz bir xil kodni necha marta copy-paste qilgansiz? 🤔
Agar javobi "Ko'p marta" bo'lsa — bu post aynan siz uchun! 👇
Sodda qilib aytganda: DRY prinsipi bir xil ishni 2 marta qilmaslik g'oyasini ilgari suradi!
DRY bizga nima beradi?
✅ Kod 3 barobar qisqa — kamroq yozasiz
✅ Xatolar 70% kamayadi — kam kod = kam xatolik
✅ Tezlik 5x oshadi — 1 joyda o'zgartirish kifoya
✅ Team ishlash oson — kodni tushunish oson
DRY bo'lmasa nima bo'ladi? (😱 DAHSHAT! Bir xil kod 5 marta!)
❌ kamida 3 barobar ko'p kod
❌ Tushunilishi qiyin
❌ Yangi narsa qo'shish = azob
🎓 DRY PRINSIPINING OLTIN QOIDALARI
1️⃣ 3 Marta Qoidasi (Rule of Three)
Bir xil kod 3 marta takrorlanadimi? Funksiyaga aylantir!
2️⃣ Ma'lumot bir joyda
3️⃣ Funksiya = Qayta ishlatish
4️⃣ DRY ≠ Har narsani funksiya qilish
Agar kod o'zi faqat bir martagina ishlatilsa, funksiya kerak emas! Balans muhim!
Komentariyada misol keltirilgan 👇
"Don't Repeat Yourself" — Senior dasturchilar bu qoidani tushida ham eslab turadi 😴
Savol: Siz bir xil kodni necha marta copy-paste qilgansiz? 🤔
Agar javobi "Ko'p marta" bo'lsa — bu post aynan siz uchun! 👇
Sodda qilib aytganda: DRY prinsipi bir xil ishni 2 marta qilmaslik g'oyasini ilgari suradi!
DRY bizga nima beradi?
✅ Kod 3 barobar qisqa — kamroq yozasiz
✅ Xatolar 70% kamayadi — kam kod = kam xatolik
✅ Tezlik 5x oshadi — 1 joyda o'zgartirish kifoya
✅ Team ishlash oson — kodni tushunish oson
DRY bo'lmasa nima bo'ladi? (😱 DAHSHAT! Bir xil kod 5 marta!)
❌ kamida 3 barobar ko'p kod
❌ Tushunilishi qiyin
❌ Yangi narsa qo'shish = azob
🎓 DRY PRINSIPINING OLTIN QOIDALARI
1️⃣ 3 Marta Qoidasi (Rule of Three)
Bir xil kod 3 marta takrorlanadimi? Funksiyaga aylantir!
2️⃣ Ma'lumot bir joyda
# ❌ Yomon
price1 = 25000
price2 = 25000
price3 = 25000
# ✅ Yaxshi
PRICES = {"osh": 25000}
3️⃣ Funksiya = Qayta ishlatish
# Bir marta yoz, 100 marta ishla! 💪
def hisoblash(narx, chegirma=0):
return narx * (1 - chegirma / 100)
4️⃣ DRY ≠ Har narsani funksiya qilish
Agar kod o'zi faqat bir martagina ishlatilsa, funksiya kerak emas! Balans muhim!
Komentariyada misol keltirilgan 👇
❤4👍3🔥1👌1
🌀 Callback Hell — Pythonda “do‘zax”ga tushmaslik sirlari 😅
🔍 Callback hell nima?
“Callback hell” — bu kod ichida ko‘p darajadagi ichma-ich callback funksiyalar ishlatilganda paydo bo‘ladigan muammo.
Bunda kod piramida shaklida cho‘zilib ketadi va tushunish, boshqarish, xato topish juda qiyinlashadi.
🚨 Nima oqibatlarga olib keladi?
Callback hell dasturda bir nechta jiddiy muammolarga sabab bo‘ladi:
• 📖 Kod o‘qilishi va tushunilishi qiyinlashadi
• 🧩 Xatolarni tutish (try/except) murakkablashadi
• 🔄 Oqimni kuzatish (qaysi funksiya qachon ishlaydi) chalkashadi
• 🧪 Test yozish va kodni kengaytirish mushkul bo‘ladi
• 💥 Kichik o‘zgarish ham butun jarayonni buzib qo‘yishi mumkin
💻 Misol — Callback Hell
Kod ishlaydi, lekin...
😵 Tushunish qiyin, xatoni topish — yanada qiyin!
✅ Yechim — async va await
Pythonda bu muammoni asinxron dasturlash yordamida hal qilish mumkin:
🟢 Natija:
• Kod toza ✅
• O‘qilishi oson ✅
• Xatolarni tutish oson ✅
• Asinxron ishlaydi ✅
💡 Xulosa
Callback hell — kichik loyihada sezilmasligi mumkin,
lekin katta tizimlarda vaqt va asabni yutadigan muammo.
Shuning uchun har doim:
👉 async/await yoki asyncio bilan ishlashni o‘rganing!
🔍 Callback hell nima?
“Callback hell” — bu kod ichida ko‘p darajadagi ichma-ich callback funksiyalar ishlatilganda paydo bo‘ladigan muammo.
Bunda kod piramida shaklida cho‘zilib ketadi va tushunish, boshqarish, xato topish juda qiyinlashadi.
🚨 Nima oqibatlarga olib keladi?
Callback hell dasturda bir nechta jiddiy muammolarga sabab bo‘ladi:
• 📖 Kod o‘qilishi va tushunilishi qiyinlashadi
• 🧩 Xatolarni tutish (try/except) murakkablashadi
• 🔄 Oqimni kuzatish (qaysi funksiya qachon ishlaydi) chalkashadi
• 🧪 Test yozish va kodni kengaytirish mushkul bo‘ladi
• 💥 Kichik o‘zgarish ham butun jarayonni buzib qo‘yishi mumkin
💻 Misol — Callback Hell
def step1(callback):
print("1-qadam bajarildi")
callback()
def step2(callback):
print("2-qadam bajarildi")
callback()
def step3(callback):
print("3-qadam bajarildi")
callback()
# 👇 Callback hell boshlanmoqda...
step1(lambda:
step2(lambda:
step3(lambda:
print("Barcha ishlar tugadi!")
)
)
)
Kod ishlaydi, lekin...
😵 Tushunish qiyin, xatoni topish — yanada qiyin!
✅ Yechim — async va await
Pythonda bu muammoni asinxron dasturlash yordamida hal qilish mumkin:
import asyncio
async def step1():
print("1-qadam bajarildi")
async def step2():
print("2-qadam bajarildi")
async def step3():
print("3-qadam bajarildi")
async def main():
await step1()
await step2()
await step3()
print("Barcha ishlar tugadi!")
asyncio.run(main())
🟢 Natija:
• Kod toza ✅
• O‘qilishi oson ✅
• Xatolarni tutish oson ✅
• Asinxron ishlaydi ✅
💡 Xulosa
Callback hell — kichik loyihada sezilmasligi mumkin,
lekin katta tizimlarda vaqt va asabni yutadigan muammo.
Shuning uchun har doim:
👉 async/await yoki asyncio bilan ishlashni o‘rganing!
👍4❤2🔥1
📡 Python loyihalarda API requestlarni bitta joyda boshqarish — professional yondashuv
Ko‘pchilik dasturchilar har bir endpoint uchun alohida requests.get() yoki requests.post() yozib yuradi. Bu kichik loyihalarda ishlashi mumkin, lekin loyihangiz kattalashganda:
• Token qo‘shish takrorlanadi
• Xatoliklar tarqoq bo‘lib ketadi
• Token refresh chalkashlashadi
• Debug qilish qiyinlashadi
Shuning uchun requestlarni bitta markaziy joyda konfiguratsiya qilish — eng to‘g‘ri yechim.
🔧 Nima qilish kerak?
Buning uchun ApiClient yoki BaseClient deb nomlangan markaziy sinf (client) yaratiladi.
U quyidagi vazifalarni bajaradi:
✅ 1. Tokenni avtomatik qo‘shadi
Headerga tokenni har safar qo‘lda yozish shart bo‘lmaydi.
✅ 2. Request xatoliklarni bitta joyda tutadi
Masalan:
• 4xx xatolarni
• 5xx server xatolarni
• Timeout yoki ConnectionError xatolarni
Hammasi yagona joyda ishlanadi.
✅ 3. Token refreshni avtomatik qiladi
Agar server 401 qaytarsa, client refresh qiladi, tokenni yangilaydi, requestni qayta yuboradi.
✅ 4. Response strukturasini standart qiladi
Har joyda response.json() deb parse qilish shart emas.
💡 Bu yondashuv nimani beradi?
• Har bir joyda token yozib yurmaymiz
• Refresh jarayoni avtomatlashtirilgan
• Kod o‘qilishi yaxshilanadi
• Kengaytirish osonlashadi
• Debug qilish tezlashadi
• Bitta joyda o‘zgarish — butun loyiha uchun o‘zgarish demak
• Serverdan qaytadigan ma'lum bir turdagi javoblarga qanday reaksiya qilishni markaziy belgilash mumkin
Bu — katta loyihalarda doim ishlatiladigan professional arxitektura.
Markazlashtirilgan request client kerak bo‘ladigan loyihalar:
• Telegram bot
• FastAPI / Django backend
• Mikroservislar
• Automation / scrap
• Desktop ilovalar
• ML backend integratsiya
Komentariyada oddiy misol keltirilgan👇
Ko‘pchilik dasturchilar har bir endpoint uchun alohida requests.get() yoki requests.post() yozib yuradi. Bu kichik loyihalarda ishlashi mumkin, lekin loyihangiz kattalashganda:
• Token qo‘shish takrorlanadi
• Xatoliklar tarqoq bo‘lib ketadi
• Token refresh chalkashlashadi
• Debug qilish qiyinlashadi
Shuning uchun requestlarni bitta markaziy joyda konfiguratsiya qilish — eng to‘g‘ri yechim.
🔧 Nima qilish kerak?
Buning uchun ApiClient yoki BaseClient deb nomlangan markaziy sinf (client) yaratiladi.
U quyidagi vazifalarni bajaradi:
✅ 1. Tokenni avtomatik qo‘shadi
Headerga tokenni har safar qo‘lda yozish shart bo‘lmaydi.
✅ 2. Request xatoliklarni bitta joyda tutadi
Masalan:
• 4xx xatolarni
• 5xx server xatolarni
• Timeout yoki ConnectionError xatolarni
Hammasi yagona joyda ishlanadi.
✅ 3. Token refreshni avtomatik qiladi
Agar server 401 qaytarsa, client refresh qiladi, tokenni yangilaydi, requestni qayta yuboradi.
✅ 4. Response strukturasini standart qiladi
Har joyda response.json() deb parse qilish shart emas.
💡 Bu yondashuv nimani beradi?
• Har bir joyda token yozib yurmaymiz
• Refresh jarayoni avtomatlashtirilgan
• Kod o‘qilishi yaxshilanadi
• Kengaytirish osonlashadi
• Debug qilish tezlashadi
• Bitta joyda o‘zgarish — butun loyiha uchun o‘zgarish demak
• Serverdan qaytadigan ma'lum bir turdagi javoblarga qanday reaksiya qilishni markaziy belgilash mumkin
Bu — katta loyihalarda doim ishlatiladigan professional arxitektura.
Markazlashtirilgan request client kerak bo‘ladigan loyihalar:
• Telegram bot
• FastAPI / Django backend
• Mikroservislar
• Automation / scrap
• Desktop ilovalar
• ML backend integratsiya
Komentariyada oddiy misol keltirilgan👇
👍3❤1🔥1
📦 Python Offline Package: Afzalliklari va Kamchiliklari
Siz loyihani internetsiz kompyuterga o‘rnatishingiz kerakmi? Offline package buning uchun ideal!
✅ Afzalliklari
• 🌐 Internetga bog‘liq emas – server yoki xavfsiz korporativ muhitda ishlaydi
• ⚡️ Tez deploy – bir marta yuklab olib, bir necha kompyuterga o‘rnatish mumkin
• 🔒 Versiya barqarorligi – paketlar aniq versiyada ishlaydi, kutilmagan update yo‘q
• 🛠 Dependency stability – paketlar orasidagi moslik oldindan tekshiriladi
⚠️ Kamchiliklari
• 📦 Hajmi katta bo‘lishi mumkin – masalan, tensorflow yoki pandas bilan
• 💻 Platformaga bog‘liq – Windows, Linux, Mac uchun alohida paketlar kerak
• ⏳ Yangilanishlar avtomatik emas – security patchlar uchun o‘zingiz yangilashingiz kerak
• 🔧 C/C++ kutubxonalar bilan murakkab – DLL yoki SO fayllar talab qilinadi
🛠 Offline Package qilish?
1️⃣ Paketlarni yuklab olish
2️⃣ Offline o‘rnatish
3️⃣ Platformga mos paketlar tanlang
• Windows x64: cp311-win_amd64.whl
• Linux x86_64: cp311-manylinux_x86_64.whl
4️⃣ Virtual environment bilan birga ishlating
💡 Xulosa:
Offline package – internetga ulanmasdan loyihani tarqatishning eng qulay yo‘li, lekin platforma va dependency-larga e’tibor berish kerak.
Siz loyihani internetsiz kompyuterga o‘rnatishingiz kerakmi? Offline package buning uchun ideal!
✅ Afzalliklari
• 🌐 Internetga bog‘liq emas – server yoki xavfsiz korporativ muhitda ishlaydi
• ⚡️ Tez deploy – bir marta yuklab olib, bir necha kompyuterga o‘rnatish mumkin
• 🔒 Versiya barqarorligi – paketlar aniq versiyada ishlaydi, kutilmagan update yo‘q
• 🛠 Dependency stability – paketlar orasidagi moslik oldindan tekshiriladi
⚠️ Kamchiliklari
• 📦 Hajmi katta bo‘lishi mumkin – masalan, tensorflow yoki pandas bilan
• 💻 Platformaga bog‘liq – Windows, Linux, Mac uchun alohida paketlar kerak
• ⏳ Yangilanishlar avtomatik emas – security patchlar uchun o‘zingiz yangilashingiz kerak
• 🔧 C/C++ kutubxonalar bilan murakkab – DLL yoki SO fayllar talab qilinadi
🛠 Offline Package qilish?
1️⃣ Paketlarni yuklab olish
pip download -d packages -r requirements.txt
2️⃣ Offline o‘rnatish
pip install --no-index --find-links=packages -r requirements.txt
3️⃣ Platformga mos paketlar tanlang
• Windows x64: cp311-win_amd64.whl
• Linux x86_64: cp311-manylinux_x86_64.whl
4️⃣ Virtual environment bilan birga ishlating
python -m venv venv
venv\Scripts\activate
pip install --no-index --find-links=packages -r requirements.txt
💡 Xulosa:
Offline package – internetga ulanmasdan loyihani tarqatishning eng qulay yo‘li, lekin platforma va dependency-larga e’tibor berish kerak.
👍2❤1🔥1
🐍 Python venv-ni boshqa kompyuterga ko‘chirsangiz nega muammo chiqadi?
Ko‘p dasturchilar loyihani tayyor virtual muhit (venv) bilan boshqa kompyuterga ko‘chirsa bo‘ladi deb o‘ylashadi. Aslida esa, Python venv portativ emas. Shuning uchun ko‘chirganda turli xatolar paydo bo‘ladi.
Keling, eng keng tarqalgan sabablarni ko‘rib chiqamiz 👇
❌ 1. Venv absolute (to‘liq) pathlarga bog‘langan
venv/bin/activate, pyvenv.cfg va Scripts/*.exe fayllarida kompyuterning eski manzili yozib qo‘yilgan bo‘ladi.
Misol:
Yangi kompyuterda bu yo‘l bo‘lmaganligi sababli:
• pip ishlamaydi
• interpreter topilmaydi
• activate xatoga tushadi
❌ 2. OS / Python versiyasi mos kelmaydi
Venv faqat yaratilgan Python versiyasi bilan ishlaydi.
Masalan:
• Eski kompyuter: Python 3.10
• Yangi kompyuter: Python 3.12
→ Venv ishlamaydi, chunki .pyd va .dll fayllar mos kelmaydi.
❌ 3. Platformaga bog‘langan paketlar ishlamaydi
Ayniqsa quyidagilar:
• numpy
• pydantic
• pythonnet
• torch
• cryptography
• har qanday .pyd, .dll, .so bilan ishlaydigan paketlar
Ular OSga bog‘langan binary fayllarga ega. Boshqa kompyuterda ular buziladi.
❌ 4. DLL, so, pyd fayllar yo‘qligi
Ko‘chirish jarayonida:
• antivirus bloklashi
• zip ochilganda zarar ko‘rishi
• dependency fayllar yo‘qolishi
kabi holatlar ko‘p uchraydi.
❌ 5. PATH va environment mos kelmaydi
Har bir kompyuterning:
• PATH
• system DLLlari
• Microsoft C++ Redistributable
• .NET Runtime (agar pythonnet ishlatilsa)
har xil bo‘ladi.
Bu ham venv buzilishiga sabab bo‘ladi.
✔️ Eng to‘g‘ri yechim nima?
1️⃣ Venvni umuman ko‘chirmang
Buning o‘rniga quyidagilarni ko‘chiring:
Yangi kompyuterda:
Bu eng toza va eng kam xatolik bilan ishlaydigan yo‘l.
2️⃣ Freeze qilingan paketlar ro‘yxatini doim qo‘shing
3️⃣ Agar butunlay offline bo‘lsangiz (ya'ni yangi komyuterda internet bo'lmasa)
pip download orqali barcha paketlarni oldindan yuklab oling:
Yangi kompyuterda:
📌 Xulosa
Python venv ko‘chiriladigan format emas.
U OS, Python versiyasi va kompyuter ichki yo‘llariga juda bog‘langan.
Shu sababli, venvni ko‘chirish → xatolarning eng katta manbai.
Eng yaxshi amaliyot:
👉 requirements.txt + yangi venv tiklas
Ko‘p dasturchilar loyihani tayyor virtual muhit (venv) bilan boshqa kompyuterga ko‘chirsa bo‘ladi deb o‘ylashadi. Aslida esa, Python venv portativ emas. Shuning uchun ko‘chirganda turli xatolar paydo bo‘ladi.
Keling, eng keng tarqalgan sabablarni ko‘rib chiqamiz 👇
❌ 1. Venv absolute (to‘liq) pathlarga bog‘langan
venv/bin/activate, pyvenv.cfg va Scripts/*.exe fayllarida kompyuterning eski manzili yozib qo‘yilgan bo‘ladi.
Misol:
home = D:\projects\old_pc\myproject\venv
Yangi kompyuterda bu yo‘l bo‘lmaganligi sababli:
• pip ishlamaydi
• interpreter topilmaydi
• activate xatoga tushadi
❌ 2. OS / Python versiyasi mos kelmaydi
Venv faqat yaratilgan Python versiyasi bilan ishlaydi.
Masalan:
• Eski kompyuter: Python 3.10
• Yangi kompyuter: Python 3.12
→ Venv ishlamaydi, chunki .pyd va .dll fayllar mos kelmaydi.
❌ 3. Platformaga bog‘langan paketlar ishlamaydi
Ayniqsa quyidagilar:
• numpy
• pydantic
• pythonnet
• torch
• cryptography
• har qanday .pyd, .dll, .so bilan ishlaydigan paketlar
Ular OSga bog‘langan binary fayllarga ega. Boshqa kompyuterda ular buziladi.
❌ 4. DLL, so, pyd fayllar yo‘qligi
Ko‘chirish jarayonida:
• antivirus bloklashi
• zip ochilganda zarar ko‘rishi
• dependency fayllar yo‘qolishi
kabi holatlar ko‘p uchraydi.
❌ 5. PATH va environment mos kelmaydi
Har bir kompyuterning:
• PATH
• system DLLlari
• Microsoft C++ Redistributable
• .NET Runtime (agar pythonnet ishlatilsa)
har xil bo‘ladi.
Bu ham venv buzilishiga sabab bo‘ladi.
✔️ Eng to‘g‘ri yechim nima?
1️⃣ Venvni umuman ko‘chirmang
Buning o‘rniga quyidagilarni ko‘chiring:
project/
requirements.txt
your_code.py
Yangi kompyuterda:
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
Bu eng toza va eng kam xatolik bilan ishlaydigan yo‘l.
2️⃣ Freeze qilingan paketlar ro‘yxatini doim qo‘shing
pip freeze > requirements.txt
3️⃣ Agar butunlay offline bo‘lsangiz (ya'ni yangi komyuterda internet bo'lmasa)
pip download orqali barcha paketlarni oldindan yuklab oling:
pip download -r requirements.txt -d offline_packages/
Yangi kompyuterda:
pip install --no-index --find-links=offline_packages -r requirements.txt
📌 Xulosa
Python venv ko‘chiriladigan format emas.
U OS, Python versiyasi va kompyuter ichki yo‘llariga juda bog‘langan.
Shu sababli, venvni ko‘chirish → xatolarning eng katta manbai.
Eng yaxshi amaliyot:
👉 requirements.txt + yangi venv tiklas
👍4❤2🔥1👏1🏆1
Ingliz tili o'rganayotganlar uchun foydali, so'z yodlashda yordam beradigan dastur kodini joylaymi? Shu postga reaksiyalar soni 30 tadan o'tsa kanalga tashlayman!
👍43🔥19🥰9❤5👨💻4👏2🎉2🤩1
code.7z
6.2 KB
Ingliz tilidan so'z yodlashda va hamma yodlayotgan so'zlaringizni mustahkamlash uchun foydali bo'lgan dastur. buni .exe varianti kerak deydiganlar bo'lsa u ham muammo emas.
Foydali bo'lgan bo'lsa yaqinlarga ulashishni unutmang:
https://t.me/python_fastapi_uz
Foydali bo'lgan bo'lsa yaqinlarga ulashishni unutmang:
https://t.me/python_fastapi_uz
❤4
Isoqjanov Ilyos | Python
code.7z
Telefonda ishlaydigan apk versiya kerak deganlar nechtamiz? Agar talabgorlar ko'p bo'lsa yana ozroq bo'sh bo'lgan vaqtimda tayyorlab beraman. Yuqoridagi kod kompyuterda python muhit orqali ishlatiladi
🔥20
🎯 #Python OOP — Encapsulation (Inkapsulyatsiya) nima?
Inkapsulyatsiya — bu obyektning ichki ma’lumotlarini tashqaridan bevosita o‘zgartirilishidan himoya qilish usuli. Ya’ni, atribut va metodlarni yashirish va ularga faqat nazorat orqali murojaat qilish.
🔐 Pythonda atributlarni yashirish 3 xil darajada amalga oshiriladi:
1️⃣ Public — ochiq atribut
Barchaga ochiq, erkin foydalanish mumkin.
2️⃣ Protected — ichki foydalanish uchun
Atribut nomi _ (bitta pastki chiziq) bilan boshlanadi.
3️⃣ Private — to‘liq himoyalangan
Atribut nomi (ikki pastki chiziq) bilan boshlanadi.
🧠 Private atributga qanday murojaat qilinadi?
Odatda bevosita murojaat qilib bo‘lmaydi, faqat getter/setter orqali:
📌 Encapsulation nima beradi?
✔️ Ma’lumotlarni himoya qiladi
✔️ Xatolarni kamaytiradi
✔️ Katta loyihalarda tartib-intizom yaratadi
✔️ Tashqi kodning ichki tuzilmani buzishini oldini oladi
Bu tushunchani yaxshi tushunmaganlar anchagina manimcha, savolaringlar bo'lsa komentariyada qoldirishinglar mumkin? Savollar to'plansa ularning hammasiga bittada javob beraman, yoki komentarida yoki video orqali👇
Inkapsulyatsiya — bu obyektning ichki ma’lumotlarini tashqaridan bevosita o‘zgartirilishidan himoya qilish usuli. Ya’ni, atribut va metodlarni yashirish va ularga faqat nazorat orqali murojaat qilish.
🔐 Pythonda atributlarni yashirish 3 xil darajada amalga oshiriladi:
1️⃣ Public — ochiq atribut
Barchaga ochiq, erkin foydalanish mumkin.
class User:
def __init__(self):
self.name = "Ali" # public
2️⃣ Protected — ichki foydalanish uchun
Atribut nomi _ (bitta pastki chiziq) bilan boshlanadi.
class User:
def __init__(self):
self._balance = 1000 # protected
3️⃣ Private — to‘liq himoyalangan
Atribut nomi (ikki pastki chiziq) bilan boshlanadi.
class User:
def __init(self):
self.__password = "1234" # private
🧠 Private atributga qanday murojaat qilinadi?
Odatda bevosita murojaat qilib bo‘lmaydi, faqat getter/setter orqali:
class User:
def __init__(self):
self.__password = "1234"
def get_password(self):
return self.__password
def set_password(self, new_pass):
if len(new_pass) >= 4:
self.__password = new_pass
else:
print("Parol kamida 4 belgidan iborat bo‘lishi kerak!")
📌 Encapsulation nima beradi?
✔️ Ma’lumotlarni himoya qiladi
✔️ Xatolarni kamaytiradi
✔️ Katta loyihalarda tartib-intizom yaratadi
✔️ Tashqi kodning ichki tuzilmani buzishini oldini oladi
Bu tushunchani yaxshi tushunmaganlar anchagina manimcha, savolaringlar bo'lsa komentariyada qoldirishinglar mumkin? Savollar to'plansa ularning hammasiga bittada javob beraman, yoki komentarida yoki video orqali👇
❤5⚡1👍1🥰1👏1
⚙️ Funksiya nima?
🐍 Python (va boshqa dasturlash tillarida) funksiya — bu kodni qayta-qayta yozmasdan, uni bitta blokka joylashtirib, kerak bo‘lganda chaqirish imkonini beradigan vosita.
🔑 Oddiy qilib aytganda:
Funksiya – bu ma’lum bir vazifani bajaradigan kod bo‘lagi. Biror ishni bir necha marta qayta qayta bajargandan ko'ra shu ishni funksiya qilib qo'yish ancha foydali. Shunda kodimiz tushunarliroq, o'zgartirish oson va hajmi kichikroq bo'ladi.
📝 Misol – funksiya ishlatmasdan:
📝 Funksiya bilan:
✅ Natija:
🔎 Nega funksiya kerak?
• Kodni tartibli qiladi
• Qayta ishlatish oson (bir marta yozasiz, ko‘p marta ishlatasiz)
• Xatolarni tezroq topish imkonini beradi
• Kodni boshqalarga tushunarli qiladi
• O'zgartirish osonroq
• Kodning hajmi kamroq
• Bu funksiyani boshqa loyihalaringizda ishlatish oson bo'ladi
📌 Xulosa:
Funksiya — bu dasturiy kodning “kichik yordamchisi”. Har bir yordamchi alohida ishni bajaradi va dasturni ancha qulay qiladi.
🐍 Python (va boshqa dasturlash tillarida) funksiya — bu kodni qayta-qayta yozmasdan, uni bitta blokka joylashtirib, kerak bo‘lganda chaqirish imkonini beradigan vosita.
🔑 Oddiy qilib aytganda:
Funksiya – bu ma’lum bir vazifani bajaradigan kod bo‘lagi. Biror ishni bir necha marta qayta qayta bajargandan ko'ra shu ishni funksiya qilib qo'yish ancha foydali. Shunda kodimiz tushunarliroq, o'zgartirish oson va hajmi kichikroq bo'ladi.
📝 Misol – funksiya ishlatmasdan:
# Uch marta salom yozamiz
print("Salom, Ali! Tizimga xush kelibsiz!")
print("Salom, Ali! Tizimga xush kelibsiz!")
print("Salom, Ali! Tizimga xush kelibsiz!")
📝 Funksiya bilan:
def salom_ber(ism):
print(f"Salom, {ism}! Tizimga xush kelibsiz!")
# Endi kerak bo‘lganda chaqiramiz
salom_ber("Ali")
salom_ber("Vali")
salom_ber("Gulnoza")
✅ Natija:
Salom, Ali! Tizimga xush kelibsiz!
Salom, Vali! Tizimga xush kelibsiz!
Salom, Gulnoza! Tizimga xush kelibsiz!
🔎 Nega funksiya kerak?
• Kodni tartibli qiladi
• Qayta ishlatish oson (bir marta yozasiz, ko‘p marta ishlatasiz)
• Xatolarni tezroq topish imkonini beradi
• Kodni boshqalarga tushunarli qiladi
• O'zgartirish osonroq
• Kodning hajmi kamroq
• Bu funksiyani boshqa loyihalaringizda ishlatish oson bo'ladi
📌 Xulosa:
Funksiya — bu dasturiy kodning “kichik yordamchisi”. Har bir yordamchi alohida ishni bajaradi va dasturni ancha qulay qiladi.
⚡7🔥3❤2👍1🥰1👏1
image_2025-11-22_10-21-47.png
152.8 KB
Pythonni o'rganish uchun roadmap (ya'ni o'rganish kerak bo'lgan narsalar va ularning ketma-ketligi). Shularning hammasini bilsangiz men senior dasturchiman deyverasiz😁
🔥9❤3👍2👏1
🧠 Pythonda Comprehension nima? Nega ishlatiladi?
Python dasturlashda comprehension — ma’lumot tuzilmalarini ixcham, tez va o‘qilishi oson tarzda yaratish usuli. U an’anaviy for sikliga qaraganda kamroq kod, ko‘proq qulaylik va yaxshi performance beradi.
Comprehensionning 4 ta asosiy turi mavjud:
🔵 1) List Comprehension
Ro‘yxat yaratishning eng mashhur usuli.
➤ Misol:
❗️ Shart bilan yozish ham mumkin:
🟢 2) Dictionary Comprehension
Lug‘atlarni tez yaratish uchun ishlatiladi.
➤ Misol:
Filtrlash bilan:
🟣 3) Set Comprehension
To‘plam (set) yaratish uchun.
➤ Misol:
🟡 4) Generator Expression (Generator Comprehension)
Xotirani juda tejamkor ishlatadi — barcha qiymatlar birdaniga emas, kerak bo‘lganda yaratiladi.
➤ Misol:
Bu ro‘yxat ham tuple ham emas — bu generator (e'tibor bering tuple emas, ko'pchilik tuple deb o'ylaydi)! Xotira kam ishlatiladi.
❓ Comprehension nega kerak? Nima yutamiz?
✔️ 1. Kod 2-3 marta qisqaradi
An’anaviy usul:
Comprehension:
✔️ 2. O‘qish va tushunish oson
Bitta qatorda nima qilinayotgani aniq ko‘rinadi.
✔️ 3. Tezroq ishlaydi (performance yaxshiroq)
Python comprehensionlarni optimallashtiradi.
✔️ 4. Xatolar kamroq bo‘ladi
append, set.add, dict[key] = value kabi funksiyalar kerak bo‘lmaydi.
❗️ Agar comprehension ishlatilmasa, nima yutqaziladi?
− Kod cho‘zilib ketadi
− Ko‘rinishi chalkash bo‘ladi
− Ba’zi hollarda sekinroq ishlaydi
− Pythonning “pythonic” uslubidan yiroqlashadi
Comprehension — bu Pythonda sodda, toza va tez kod yozishning eng muhim vositalaridan biri.
Python dasturlashda comprehension — ma’lumot tuzilmalarini ixcham, tez va o‘qilishi oson tarzda yaratish usuli. U an’anaviy for sikliga qaraganda kamroq kod, ko‘proq qulaylik va yaxshi performance beradi.
Comprehensionning 4 ta asosiy turi mavjud:
🔵 1) List Comprehension
Ro‘yxat yaratishning eng mashhur usuli.
➤ Misol:
numbers = [1, 2, 3, 4]
squares = [n*n for n in numbers]
❗️ Shart bilan yozish ham mumkin:
even = [n for n in numbers if n % 2 == 0]
🟢 2) Dictionary Comprehension
Lug‘atlarni tez yaratish uchun ishlatiladi.
➤ Misol:
kvadratlar = {n: n*n for n in range(1, 6)}Filtrlash bilan:
even_map = {n: n*n for n in range(10) if n % 2 == 0}🟣 3) Set Comprehension
To‘plam (set) yaratish uchun.
➤ Misol:
letters = {ch for ch in "hello python"}🟡 4) Generator Expression (Generator Comprehension)
Xotirani juda tejamkor ishlatadi — barcha qiymatlar birdaniga emas, kerak bo‘lganda yaratiladi.
➤ Misol:
gen = (n*n for n in range(10))
Bu ro‘yxat ham tuple ham emas — bu generator (e'tibor bering tuple emas, ko'pchilik tuple deb o'ylaydi)! Xotira kam ishlatiladi.
❓ Comprehension nega kerak? Nima yutamiz?
✔️ 1. Kod 2-3 marta qisqaradi
An’anaviy usul:
result = []
for n in range(10):
result.append(n*n)
Comprehension:
result = [n*n for n in range(10)]
✔️ 2. O‘qish va tushunish oson
Bitta qatorda nima qilinayotgani aniq ko‘rinadi.
✔️ 3. Tezroq ishlaydi (performance yaxshiroq)
Python comprehensionlarni optimallashtiradi.
✔️ 4. Xatolar kamroq bo‘ladi
append, set.add, dict[key] = value kabi funksiyalar kerak bo‘lmaydi.
❗️ Agar comprehension ishlatilmasa, nima yutqaziladi?
− Kod cho‘zilib ketadi
− Ko‘rinishi chalkash bo‘ladi
− Ba’zi hollarda sekinroq ishlaydi
− Pythonning “pythonic” uslubidan yiroqlashadi
Comprehension — bu Pythonda sodda, toza va tez kod yozishning eng muhim vositalaridan biri.
❤6👍2🔥2⚡1
🔵 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:
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:
Bu yerda private atribut umuman yo‘q, lekin property juda chiroyli ishlayapti.
🟣 Yoki faqat o‘qiladigan atribut:
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.
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.
👍2🔥1👏1
🔥 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:
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.
👉 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.
❤2👍2🔥1👏1
🐍 Python: @classmethod nimaga kerak?
Pythonda obyektlar va classlar qanday ishlashini tushunish — toza va mantiqli kod yozishning asosiy qismidir. Bugun @classmethod haqida sodda qilib tushuntiramiz.
🔹 Obyekt atributi vs Class atributi
• Obyekt atributi — har bir yaratilgan obyektga tegishli (self).
• Class atributi — butun classga tegishli, barcha obyektlar ishlatadi (cls).
Demak class ham obyekt ham o'zining attributiga ega ekan, nega endi ularni o'zining metodlariga ega bo'lolmas ekan, albatta uning ham imkoni bor. Agar biz odatdagi metod yaratsak u metod obyektga tegishli bo'ladi va obyekt yaratilgandan keyin ishlaydi, @classmethod orqali metod yaratsak esa, bu metod class ga tegishli bo'ladi va uni obyekt yaratilmasdan oldin ham ishlata olamiz.
Yana yuqoridagi postda aytdikki, class atributini obyekt metodi yoki attributi orqali o'zgartirishni imkoni yo'q, agar o'zgartiramiz desak obyekt o'zgartirish o'zrniga o'zida shunaqa attribut yaratib oladi. Lekin biz class attributini @classmethod orqali hosil qilingan metod orqali o'zgartirishimiz mumkin, chunki bu metod class ga tegishli.
🔹 @classmethod nima qiladi?
@classmethod — classga tegishli metod.
U obyektga emas, classning o‘ziga ishlaydi, shuning uchun u birinchi argument sifatida: cls qabul qiladi.
Obyekt orqali chaqirilsa ham, baribir class bilan ishlaydi, obyekt bilan emas.
🔍 Misol:
• count → class atributi
• get_count() → class metodi
• obyektlar → class atributidan foydalana oladi
• obyektlar → class metodidan ham foydalana oladi
(lekin metod baribir cls bilan ishlaydi)
📌 Qisqa xulosa
• Obyekt → class atributidan foydalana oladi.
• Xuddi shunday obyekt → class metodidan (@classmethod) ham foydalana oladi.
• Lekin @classmethod obyektga emas, classga tegishli.
Pythonda obyektlar va classlar qanday ishlashini tushunish — toza va mantiqli kod yozishning asosiy qismidir. Bugun @classmethod haqida sodda qilib tushuntiramiz.
🔹 Obyekt atributi vs Class atributi
• Obyekt atributi — har bir yaratilgan obyektga tegishli (self).
• Class atributi — butun classga tegishli, barcha obyektlar ishlatadi (cls).
Demak class ham obyekt ham o'zining attributiga ega ekan, nega endi ularni o'zining metodlariga ega bo'lolmas ekan, albatta uning ham imkoni bor. Agar biz odatdagi metod yaratsak u metod obyektga tegishli bo'ladi va obyekt yaratilgandan keyin ishlaydi, @classmethod orqali metod yaratsak esa, bu metod class ga tegishli bo'ladi va uni obyekt yaratilmasdan oldin ham ishlata olamiz.
Yana yuqoridagi postda aytdikki, class atributini obyekt metodi yoki attributi orqali o'zgartirishni imkoni yo'q, agar o'zgartiramiz desak obyekt o'zgartirish o'zrniga o'zida shunaqa attribut yaratib oladi. Lekin biz class attributini @classmethod orqali hosil qilingan metod orqali o'zgartirishimiz mumkin, chunki bu metod class ga tegishli.
🔹 @classmethod nima qiladi?
@classmethod — classga tegishli metod.
U obyektga emas, classning o‘ziga ishlaydi, shuning uchun u birinchi argument sifatida: cls qabul qiladi.
Obyekt orqali chaqirilsa ham, baribir class bilan ishlaydi, obyekt bilan emas.
🔍 Misol:
class Counter:
count = 0 # sinf atributi
def __init__(self):
Counter.count += 1
@classmethod
def get_count(cls):
return cls.count
• count → class atributi
• get_count() → class metodi
• obyektlar → class atributidan foydalana oladi
• obyektlar → class metodidan ham foydalana oladi
(lekin metod baribir cls bilan ishlaydi)
📌 Qisqa xulosa
• Obyekt → class atributidan foydalana oladi.
• Xuddi shunday obyekt → class metodidan (@classmethod) ham foydalana oladi.
• Lekin @classmethod obyektga emas, classga tegishli.
👍2🔥1👀1
Forwarded from Isoqjanov Ilyos | Python
🐍🎭 Python’da dekorator yozyapsizmi? @wraps-siz bo‘lmang!
Ko‘pchilik dekorator yozganda bir xatoga yo‘l qo‘yadi:
Ular funksiya metadatasini yo‘qotib qo‘yadi — nomi, hujjati, parametrlari yo‘qoladi!
🎯 Yechim: functools.wraps
✅ Asl funksiyaning:
• Nomi (name)
• Hujjati (doc)
• Annotatsiyalari
• Modul nomi
hammasini saqlab qoladi.
💡 wraps bo‘lmasa — hello funksiyangiz nomi ichki bo‘lib qoladi va help() yoki logging ishlamaydi.
⚠️ Dekorator yozsangiz, @wraps har doim yozing. Bu yaxshi amaliyot (best practice)!
Ko‘pchilik dekorator yozganda bir xatoga yo‘l qo‘yadi:
Ular funksiya metadatasini yo‘qotib qo‘yadi — nomi, hujjati, parametrlari yo‘qoladi!
🎯 Yechim: functools.wraps
✅ Asl funksiyaning:
• Nomi (name)
• Hujjati (doc)
• Annotatsiyalari
• Modul nomi
hammasini saqlab qoladi.
💡 wraps bo‘lmasa — hello funksiyangiz nomi ichki bo‘lib qoladi va help() yoki logging ishlamaydi.
⚠️ Dekorator yozsangiz, @wraps har doim yozing. Bu yaxshi amaliyot (best practice)!
Dasturchi SQL queryni bilishi kerakmi?
Bugungi kunda ko‘pchilik ORMdan foydalanadi. Lekin bu SQL bilish shart emas, degani emas.
1️⃣ Ha, SQL ni bilishi — shart.
Negaki, ORM faqat qulay vosita. Lekin backend logikasi oxir-oqibat baribir SQL queryga aylanadi. Shu sababli:
• Query nima bo‘layotganini tushunish
• Performance muammolarini topish
• Noto‘g‘ri join, filtr yoki index sababli sekinlashishni aniqlash
• ORM qila olmaydigan murakkab report yoki agregatlarni yozish
bularning barchasi SQLni bilishni talab qiladi.
2️⃣ ORM — qulaylik, SQL — poydevor.
CRUD — ORM bilan.
Murakkab va optimizatsiya talab qiladigan querylar — SQL bilan.
Professional darajada ishlaydigan backendchi ikkalasini ham biladi.
3️⃣ Yakuniy xulosa
Ha, dasturchi SQLni bilishi kerak.
ORM uni soddalashtiradi xolos, almashtirmaydi.
Siz ham o'z fikringizni bildiring👇
Bugungi kunda ko‘pchilik ORMdan foydalanadi. Lekin bu SQL bilish shart emas, degani emas.
1️⃣ Ha, SQL ni bilishi — shart.
Negaki, ORM faqat qulay vosita. Lekin backend logikasi oxir-oqibat baribir SQL queryga aylanadi. Shu sababli:
• Query nima bo‘layotganini tushunish
• Performance muammolarini topish
• Noto‘g‘ri join, filtr yoki index sababli sekinlashishni aniqlash
• ORM qila olmaydigan murakkab report yoki agregatlarni yozish
bularning barchasi SQLni bilishni talab qiladi.
2️⃣ ORM — qulaylik, SQL — poydevor.
CRUD — ORM bilan.
Murakkab va optimizatsiya talab qiladigan querylar — SQL bilan.
Professional darajada ishlaydigan backendchi ikkalasini ham biladi.
3️⃣ Yakuniy xulosa
Ha, dasturchi SQLni bilishi kerak.
ORM uni soddalashtiradi xolos, almashtirmaydi.
Siz ham o'z fikringizni bildiring👇
👍4❤1🔥1