🧪 Obyekt atributi mavjudligini tekshirish — try/except’ga hojat yo‘q!
Ba’zida obyektning ma’lum bir xususiyatga ega yoki yo‘qligini bilish kerak bo‘ladi. Bunday holatda
✅ Buning uchun
🔍 Misol:
🎯 Xulosa:
Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post links: https://t.me/c/2447128954/14, https://t.me/c/2447128954/15
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
Ba’zida obyektning ma’lum bir xususiyatga ega yoki yo‘qligini bilish kerak bo‘ladi. Bunday holatda
try/except bloklaridan foydalanish shart emas.✅ Buning uchun
hasattr() funksiyasi mavjud — qisqa va qulay yechim!🔍 Misol:
class Person:
name = "Ali"
p = Person()
print(hasattr(p, "name")) # True
print(hasattr(p, "age")) # False
🎯 Xulosa:
hasattr() — bu obyektning atributi mavjudligini aniq, toza va o‘qilishi oson tarzda tekshirish imkonini beradi. Ortiqcha kod yozish shart emas!Boshlovchilar uchun yopiq kanalimiz:
https://t.me/+4-HzPYPUWWw3NDEy
Python bo'yicha ozroq tajriba ega bo'lganlar uchun yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post links: https://t.me/c/2447128954/14, https://t.me/c/2447128954/15
Leetcode masalalari bo'yicha:
https://t.me/+x2ag7zS70DQyMjJi
https://t.me/simplypythonuz
Modul asosidagi dasturlash nima?
Modul asosidagi dasturlash — bu dastur kodini strukturalashtirish yondashuvi bo‘lib, unda funksiyalar alohida modullarga ajratiladi.
🔍 Modul dasturlashning asosiy afzalliklari:
✅ Har bir modul aniq vazifani bajaradi — bu kodni o‘qishni va tushunishni osonlashtiradi.
✅ Modullarni dasturning turli qismlarida qayta ishlatish mumkin.
✅ Har bir modulni alohida test qilish va nosozliklarni topish osonlashadi.
✅ Jamoada ishlaganda ishni bo‘lib olish va parallel rivojlantirish qulay bo‘ladi.
✅ Kodni yangilash va qo‘llab-quvvatlash soddalashadi.
📦 Modul yondashuvi — katta loyihalar uchun ayni muddao!
https://t.me/simplypythonuz
Modul asosidagi dasturlash — bu dastur kodini strukturalashtirish yondashuvi bo‘lib, unda funksiyalar alohida modullarga ajratiladi.
🔍 Modul dasturlashning asosiy afzalliklari:
✅ Har bir modul aniq vazifani bajaradi — bu kodni o‘qishni va tushunishni osonlashtiradi.
✅ Modullarni dasturning turli qismlarida qayta ishlatish mumkin.
✅ Har bir modulni alohida test qilish va nosozliklarni topish osonlashadi.
✅ Jamoada ishlaganda ishni bo‘lib olish va parallel rivojlantirish qulay bo‘ladi.
✅ Kodni yangilash va qo‘llab-quvvatlash soddalashadi.
📦 Modul yondashuvi — katta loyihalar uchun ayni muddao!
https://t.me/simplypythonuz
#function
Hamma IP va MAC manzillarni ro‘yxat qilib qaytaradigan klass
—->
yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post link: https://t.me/c/2447128954/16
Hamma IP va MAC manzillarni ro‘yxat qilib qaytaradigan klass
—->
yopiq kanal:
https://t.me/+G8Ao2nlAzBQ0ZGIy
post link: https://t.me/c/2447128954/16
Agar dekorator hech nima qaytarmasa, nima bo‘ladi?
Agar dekorator hech qanday qiymat qaytarmasa, quyidagilar sodir bo‘ladi:
🚫 Dekorator asl funksiyani None bilan almashtiradi.
🚫 Dekoratsiyalangan funksiyani chaqirishga uringaningizda AttributeError yuz beradi — chunki None chaqiriladigan obyekt emas.
🚫 Funksiyaning o‘zi hech qachon bajarilmaydi.
🚫 Bunday dekorator funksiyani "buzadi" — u endi ishlamay qoladi.
✅ Shuning uchun, har qanday dekorator albatta chaqiriladigan qiymatni qaytarishi kerak — bu asl funksiya bo‘lishi yoki yangi "qadoqlovchi" (wrapper) funksiya bo‘lishi mumkin.
💡 Dekoratorning vazifasi — funksiyani buzmasdan, uning xatti-harakatini o‘zgartirish!
https://t.me/simplypythonuz
Agar dekorator hech qanday qiymat qaytarmasa, quyidagilar sodir bo‘ladi:
🚫 Dekorator asl funksiyani None bilan almashtiradi.
🚫 Dekoratsiyalangan funksiyani chaqirishga uringaningizda AttributeError yuz beradi — chunki None chaqiriladigan obyekt emas.
🚫 Funksiyaning o‘zi hech qachon bajarilmaydi.
🚫 Bunday dekorator funksiyani "buzadi" — u endi ishlamay qoladi.
✅ Shuning uchun, har qanday dekorator albatta chaqiriladigan qiymatni qaytarishi kerak — bu asl funksiya bo‘lishi yoki yangi "qadoqlovchi" (wrapper) funksiya bo‘lishi mumkin.
💡 Dekoratorning vazifasi — funksiyani buzmasdan, uning xatti-harakatini o‘zgartirish!
https://t.me/simplypythonuz
#telegrambot
Yopiq telegram kanalga qo'shilish uchun so'rov yuborganlarni kanalga qo'shadigan va qo'shgan foydalanuvchisi ma'lumotlarini adminga yuboradigan bot kodi
—->
yopiq kanal: https://t.me/+G8Ao2nlAzBQ0ZGIy
post link: https://t.me/c/2447128954/18
https://t.me/simplypythonuz
Yopiq telegram kanalga qo'shilish uchun so'rov yuborganlarni kanalga qo'shadigan va qo'shgan foydalanuvchisi ma'lumotlarini adminga yuboradigan bot kodi
—->
yopiq kanal: https://t.me/+G8Ao2nlAzBQ0ZGIy
post link: https://t.me/c/2447128954/18
https://t.me/simplypythonuz
nonlocal nima?
nonlocal — bu Python dasturlash tilidagi kalit so‘z bo‘lib, ichki (nested) funksiyada tashqi, lekin global bo‘lmagan o‘zgaruvchiga murojaat qilish va uni o‘zgartirish uchun ishlatiladi.
📌 Qachon kerak bo‘ladi?
Agar siz ichki funksiyada tashqi funksiyadagi o‘zgaruvchini o‘zgartirmoqchi bo‘lsangiz, oddiy = orqali bu ishni qilolmaysiz — chunki bu holda Python yangi lokal o‘zgaruvchi deb qabul qiladi.
Shuning uchun nonlocal ishlatiladi.
🔍 Misol:
🖨 Natija:
Agar nonlocal o‘rniga oddiy x += 1 yozilganida, UnboundLocalError yoki noto‘g‘ri natija chiqardi — chunki x ni lokal deb qabul qilinardi.
✅ Xulosa:
• nonlocal — bu funksiya ichidagi funksiyada tashqi lokal o‘zgaruvchiga kirish va uni o‘zgartirish imkonini beradi.
• U global emas, lokal ichki kontekst uchun ishlaydi.
• Asosan closure (zamykaniye) kabi konstruktsiyalarda qo‘llanadi.
https://t.me/simplypythonuz
nonlocal — bu Python dasturlash tilidagi kalit so‘z bo‘lib, ichki (nested) funksiyada tashqi, lekin global bo‘lmagan o‘zgaruvchiga murojaat qilish va uni o‘zgartirish uchun ishlatiladi.
📌 Qachon kerak bo‘ladi?
Agar siz ichki funksiyada tashqi funksiyadagi o‘zgaruvchini o‘zgartirmoqchi bo‘lsangiz, oddiy = orqali bu ishni qilolmaysiz — chunki bu holda Python yangi lokal o‘zgaruvchi deb qabul qiladi.
Shuning uchun nonlocal ishlatiladi.
🔍 Misol:
def tashqi():
x = 10
def ichki():
nonlocal x
x += 1
print("Ichki:", x)
ichki()
print("Tashqi:", x)
tashqi()
🖨 Natija:
Ichki: 11
Tashqi: 11
Agar nonlocal o‘rniga oddiy x += 1 yozilganida, UnboundLocalError yoki noto‘g‘ri natija chiqardi — chunki x ni lokal deb qabul qilinardi.
✅ Xulosa:
• nonlocal — bu funksiya ichidagi funksiyada tashqi lokal o‘zgaruvchiga kirish va uni o‘zgartirish imkonini beradi.
• U global emas, lokal ichki kontekst uchun ishlaydi.
• Asosan closure (zamykaniye) kabi konstruktsiyalarda qo‘llanadi.
https://t.me/simplypythonuz
Zamykaniye (closure) — funksiyada holatni eslab qolish mexanizmi
Zamykaniye — bu ichki funksiya bo‘lib, u tashqi funksiyadagi o‘zgaruvchilarga ularning ko‘rinish doirasidan tashqarida bo‘lsa ham murojaat qila oladi.
🔑 Muhim jihati shundaki, zamykaniye qiymatlarni emas, balki o‘zgaruvchining o‘ziga bo‘lgan havolani (reference) eslab qoladi. Bu esa, ularni so‘nggi holati bilan ishlatishga imkon beradi.
📌 Zamykaniye qachon kerak bo‘ladi?
— Funktsiyada doimiy holatni saqlab turish kerak bo‘lsa.
— Global o‘zgaruvchilarsiz kod yozmoqchi bo‘lsangiz.
— Yangi funksiya yaratish uchun funksiya ichida funksiyadan foydalanish zarur bo‘lsa.
🧠 Python’da zamykaniye oddiy ko‘rinishda ishlaydi:
Bu yerda increment() funksiyasi son o‘zgaruvchisini eslab qolgan — mana bu zamykaniye!
💡 Kichik, ammo kuchli konsepsiya — kodingizni toza, moslashuvchan va kapsullangan qiladi.
Zamykaniye — bu ichki funksiya bo‘lib, u tashqi funksiyadagi o‘zgaruvchilarga ularning ko‘rinish doirasidan tashqarida bo‘lsa ham murojaat qila oladi.
🔑 Muhim jihati shundaki, zamykaniye qiymatlarni emas, balki o‘zgaruvchining o‘ziga bo‘lgan havolani (reference) eslab qoladi. Bu esa, ularni so‘nggi holati bilan ishlatishga imkon beradi.
📌 Zamykaniye qachon kerak bo‘ladi?
— Funktsiyada doimiy holatni saqlab turish kerak bo‘lsa.
— Global o‘zgaruvchilarsiz kod yozmoqchi bo‘lsangiz.
— Yangi funksiya yaratish uchun funksiya ichida funksiyadan foydalanish zarur bo‘lsa.
🧠 Python’da zamykaniye oddiy ko‘rinishda ishlaydi:
def counter():
son = 0
def increment():
nonlocal son
son += 1
return son
return increment
hisobla = counter()
print(hisobla()) # 1
print(hisobla()) # 2
Bu yerda increment() funksiyasi son o‘zgaruvchisini eslab qolgan — mana bu zamykaniye!
💡 Kichik, ammo kuchli konsepsiya — kodingizni toza, moslashuvchan va kapsullangan qiladi.
Faqat nomlangan argumentlarni (kwargs) qabul qiluvchi funksiyalar haqida
Python’da **kwargs — bu funksiyaga istalgan miqdorda nomlangan argumentlarni uzatish usuli.
🔹 **kwargs funksiyada oxirgi parametr sifatida yoziladi.
🔹 Unga uzatilgan argumentlar kalit-qiymat (key-value) juftliklari shaklida dict (lug‘at) ga aylanadi.
🔹 Bu funksiyaga qo‘shimcha, dinamik parametrlar yuborish uchun juda qulay.
📌 Misol:
🧠 Agar siz *args (pozitsion argumentlar) va **kwargs ni birga ishlatsangiz — *args doim birinchi bo‘lib ko‘rsatiladi:
🎯 **kwargs — funksiyani moslashuvchan, kengaytiriladigan va universal qilish uchun qudratli vosita!
https://t.me/simplypythonuz
Python’da **kwargs — bu funksiyaga istalgan miqdorda nomlangan argumentlarni uzatish usuli.
🔹 **kwargs funksiyada oxirgi parametr sifatida yoziladi.
🔹 Unga uzatilgan argumentlar kalit-qiymat (key-value) juftliklari shaklida dict (lug‘at) ga aylanadi.
🔹 Bu funksiyaga qo‘shimcha, dinamik parametrlar yuborish uchun juda qulay.
📌 Misol:
def salom_ber(**kwargs):
for kalit, qiymat in kwargs.items():
print(f"{kalit} = {qiymat}")
salom_ber(ism='Ali', yosh=25, til='Python')
# chiqadi: ism = Ali, yosh = 25, til = Python
🧠 Agar siz *args (pozitsion argumentlar) va **kwargs ni birga ishlatsangiz — *args doim birinchi bo‘lib ko‘rsatiladi:
def funk(a, *args, **kwargs):
pass
🎯 **kwargs — funksiyani moslashuvchan, kengaytiriladigan va universal qilish uchun qudratli vosita!
https://t.me/simplypythonuz
slots atributi — xotira tejamkor va qat’iy klasslar uchun vosita
Python’dagi slots — bu klass obyektlarida faqat oldindan belgilangan atributlarga ruxsat berish imkonini beruvchi maxsus atributdir.
🔐 Nega slots kerak?
✅ Klass obyektlariga yangi atributlar yaratishga ruxsat bermaydi — faqat slots ro‘yxatida ko‘rsatilganlar bo‘ladi.
✅ Har bir obyekt uchun alohida dict yaratilmaydi → bu esa xotiradan tejamkor foydalanish degani.
✅ Katta miqdordagi oddiy obyektlar bilan ishlaganda samaradorlikni oshiradi.
📌 Misol:
⚠️ Eslatma:
— slots meros bo‘lmaydi, har bir voris klassda alohida aniqlanishi kerak.
— Dinamik atribut qo‘shish kerak bo‘lgan holatlarda slots ishlatilmaydi.
🧠 Tavsiya qilinadi: slots ni oddiy, o‘zgarmas (immutable) klasslar va ko‘p obyekt yaratiladigan tizimlarda ishlating.
https://t.me/simplypythonuz
Python’dagi slots — bu klass obyektlarida faqat oldindan belgilangan atributlarga ruxsat berish imkonini beruvchi maxsus atributdir.
🔐 Nega slots kerak?
✅ Klass obyektlariga yangi atributlar yaratishga ruxsat bermaydi — faqat slots ro‘yxatida ko‘rsatilganlar bo‘ladi.
✅ Har bir obyekt uchun alohida dict yaratilmaydi → bu esa xotiradan tejamkor foydalanish degani.
✅ Katta miqdordagi oddiy obyektlar bilan ishlaganda samaradorlikni oshiradi.
📌 Misol:
class Foydalanuvchi:
__slots__ = ['ism', 'yosh']
def __init__(self, ism, yosh):
self.ism = ism
self.yosh = yosh
f = Foydalanuvchi('Ali', 25)
f.email = 'ali@gmail.com' # ❌ AttributeError: 'Foydalanuvchi' object has no attribute 'email'
⚠️ Eslatma:
— slots meros bo‘lmaydi, har bir voris klassda alohida aniqlanishi kerak.
— Dinamik atribut qo‘shish kerak bo‘lgan holatlarda slots ishlatilmaydi.
🧠 Tavsiya qilinadi: slots ni oddiy, o‘zgarmas (immutable) klasslar va ko‘p obyekt yaratiladigan tizimlarda ishlating.
https://t.me/simplypythonuz
Python modullarni qanday qidiradi?
Python’da modul import qilinayotganda, interpreter ma’lum bir tartib bo‘yicha uni qidiradi:
🔍 Modulni qidirish algoritmi:
1️⃣ Avvalo ichki (built-in) modullar tekshiriladi — ya’ni Python’ning o‘zida mavjud bo‘lgan modullar (math, sys, time va h.k.).
2️⃣ So‘ngra sys.path ro‘yxatidagi kataloglar navbatma-navbat ko‘rib chiqiladi:
🔹 Joriy skript joylashgan papka
🔹 PYTHONPATH atrof-muhit o‘zgaruvchisi orqali berilgan kataloglar
🔹 Python'ning standart kutubxonalar kataloglari
3️⃣ Agar modul yuqoridagilarning hech birida topilmasa — ImportError istisnosi yuz beradi.
💡 sys.path’ga yangi yo‘l qo‘shib, siz qo‘shimcha kataloglardan modul import qilishingiz mumkin.
https://t.me/simplypythonuz
Python’da modul import qilinayotganda, interpreter ma’lum bir tartib bo‘yicha uni qidiradi:
🔍 Modulni qidirish algoritmi:
1️⃣ Avvalo ichki (built-in) modullar tekshiriladi — ya’ni Python’ning o‘zida mavjud bo‘lgan modullar (math, sys, time va h.k.).
2️⃣ So‘ngra sys.path ro‘yxatidagi kataloglar navbatma-navbat ko‘rib chiqiladi:
🔹 Joriy skript joylashgan papka
🔹 PYTHONPATH atrof-muhit o‘zgaruvchisi orqali berilgan kataloglar
🔹 Python'ning standart kutubxonalar kataloglari
3️⃣ Agar modul yuqoridagilarning hech birida topilmasa — ImportError istisnosi yuz beradi.
import sys
print(sys.path) # Python modul qidirayotgan yo‘llarni ko‘rsatadi
💡 sys.path’ga yangi yo‘l qo‘shib, siz qo‘shimcha kataloglardan modul import qilishingiz mumkin.
import sys
sys.path.append('/path/to/your/modules')
https://t.me/simplypythonuz
Sizning yopiq guruhingizdan kanalingizga aytilgan vaqtda avtomatik post tashlab turadigan bot kodi:
——->
yopiq kanal: https://t.me/+G8Ao2nlAzBQ0ZGIy
post link: https://t.me/c/2447128954/24
https://t.me/simplypythonuz
——->
yopiq kanal: https://t.me/+G8Ao2nlAzBQ0ZGIy
post link: https://t.me/c/2447128954/24
https://t.me/simplypythonuz
JSON modulida qo‘llab-quvvatlanmaydigan obyektlarni qanday seyrializatsiya qilish mumkin?
Agar siz JSON orqali seyrializatsiya qilmoqchi bo‘lgan obyekt standart json moduli tomonidan qo‘llab-quvvatlanmasa — bu muammoning bir nechta yechimlari mavjud:
🔧 Echimlar:
1️⃣ __getattr__ va __setattr__ metodlarini yozish
Obyektni dict shakliga o‘tkazish orqali JSON formatga oson o‘tkazish mumkin.
2️⃣ @dataclass dekoratori
dataclasses modulidagi @dataclass avtomatik ravishda obyektni JSON'ga tayyor holatga keltiradi.
3️⃣ json.JSONEncoder dan voris olish
Maxsus default() metodini yozish orqali murakkab obyektlarni o‘zingiz istagancha seyrializatsiya qilish mumkin.
4️⃣ marshmallow kutubxonasidan foydalanish
Kompleks obyektlar uchun seyrializatsiya/deseyrializatsiya sxemalarini yaratish imkonini beradi.
5️⃣ Qo‘lda dict yoki list ga aylantirish
Obyekt metodlari yoki reflection orqali JSON formatga mos shaklga keltirish.
6️⃣ Boshqa formatlarga o‘tish
Masalan: YAML, MessagePack yoki protobuf — ular ko‘proq ma’lumot turlarini qo‘llab-quvvatlaydi.
💡 Har doim obyektni JSON’ga o‘tkazishdan oldin: uni oddiy ma’lumot turiga aylantiring yoki mos keluvchi vositadan foydalaning.
Agar siz JSON orqali seyrializatsiya qilmoqchi bo‘lgan obyekt standart json moduli tomonidan qo‘llab-quvvatlanmasa — bu muammoning bir nechta yechimlari mavjud:
🔧 Echimlar:
1️⃣ __getattr__ va __setattr__ metodlarini yozish
Obyektni dict shakliga o‘tkazish orqali JSON formatga oson o‘tkazish mumkin.
2️⃣ @dataclass dekoratori
dataclasses modulidagi @dataclass avtomatik ravishda obyektni JSON'ga tayyor holatga keltiradi.
3️⃣ json.JSONEncoder dan voris olish
Maxsus default() metodini yozish orqali murakkab obyektlarni o‘zingiz istagancha seyrializatsiya qilish mumkin.
4️⃣ marshmallow kutubxonasidan foydalanish
Kompleks obyektlar uchun seyrializatsiya/deseyrializatsiya sxemalarini yaratish imkonini beradi.
5️⃣ Qo‘lda dict yoki list ga aylantirish
Obyekt metodlari yoki reflection orqali JSON formatga mos shaklga keltirish.
6️⃣ Boshqa formatlarga o‘tish
Masalan: YAML, MessagePack yoki protobuf — ular ko‘proq ma’lumot turlarini qo‘llab-quvvatlaydi.
💡 Har doim obyektni JSON’ga o‘tkazishdan oldin: uni oddiy ma’lumot turiga aylantiring yoki mos keluvchi vositadan foydalaning.
# JSONEncoder misoli:
import json
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, MyCustomClass):
return obj.to_dict()
return super().default(obj)
Seyrializatsiya (serializatsiya) nima?
Seyrializatsiya — bu obyektlarni baytlar oqimiga aylantirish jarayoni bo‘lib, ular faylga, ma’lumotlar bazasiga saqlanishi yoki tarmoq orqali uzatilishi mumkin.
🧠 Bu yordamida obyekt holatini saqlab qo‘yish va keyinroq tiklash mumkin bo‘ladi.
📌 Seyrializatsiyaning afzalliklari:
✅ Dastur sessiyalari orasida obyekt holatini saqlash va tiklash.
✅ Obyektlarni tarmoq orqali boshqa ilovalar yoki serverlarga uzatish.
✅ Platformaga bog‘liq bo‘lmagan saqlash formatiga aylantirish imkoniyati (masalan: JSON, XML, pickle).
💡 Oddiy qilib aytganda, seyrializatsiya — bu ma’lumotlarni saqlash yoki yuborish uchun “yig‘ishtirib” olish jarayoni.
Seyrializatsiya — bu obyektlarni baytlar oqimiga aylantirish jarayoni bo‘lib, ular faylga, ma’lumotlar bazasiga saqlanishi yoki tarmoq orqali uzatilishi mumkin.
🧠 Bu yordamida obyekt holatini saqlab qo‘yish va keyinroq tiklash mumkin bo‘ladi.
📌 Seyrializatsiyaning afzalliklari:
✅ Dastur sessiyalari orasida obyekt holatini saqlash va tiklash.
✅ Obyektlarni tarmoq orqali boshqa ilovalar yoki serverlarga uzatish.
✅ Platformaga bog‘liq bo‘lmagan saqlash formatiga aylantirish imkoniyati (masalan: JSON, XML, pickle).
💡 Oddiy qilib aytganda, seyrializatsiya — bu ma’lumotlarni saqlash yoki yuborish uchun “yig‘ishtirib” olish jarayoni.
# Python'da misol (pickle yordamida):
import pickle
data = {'user': 'Ali', 'age': 25}
with open('data.pkl', 'wb') as f:
pickle.dump(data, f)
__all__ atributi nima uchun kerak?
Python dasturlashda __all__ — bu moduldan from modul import * yordamida nima eksport qilinishini boshqaruvchi maxsus atribut.
🔍 Asosiy ma'lumotlar:
✅ all — bu eksport qilinadigan nomlar ro‘yxati bo‘lishi kerak.
✅ Agar all aniqlanmagan bo‘lsa, import * barcha _ bilan boshlanmagan nomlarni import qiladi.
✅ all yordamida modul muallifi faqat ommaviy API qismlarini eksport qilinishini nazorat qilishi mumkin.
✅ Ichki funksiyalar, klasslar yoki o‘zgaruvchilar tasodifan eksport qilinmaydi — bu kodni toza va tartibli saqlashga yordam beradi.
💡 Qisqacha qilib aytganda, all — bu modulning ko‘rinishini boshqaruvchi oddiy, ammo foydali vosita.
📦 Foydalaning — kod yanada tushunarli va xavfsiz bo‘ladi!
Python dasturlashda __all__ — bu moduldan from modul import * yordamida nima eksport qilinishini boshqaruvchi maxsus atribut.
🔍 Asosiy ma'lumotlar:
✅ all — bu eksport qilinadigan nomlar ro‘yxati bo‘lishi kerak.
✅ Agar all aniqlanmagan bo‘lsa, import * barcha _ bilan boshlanmagan nomlarni import qiladi.
✅ all yordamida modul muallifi faqat ommaviy API qismlarini eksport qilinishini nazorat qilishi mumkin.
✅ Ichki funksiyalar, klasslar yoki o‘zgaruvchilar tasodifan eksport qilinmaydi — bu kodni toza va tartibli saqlashga yordam beradi.
💡 Qisqacha qilib aytganda, all — bu modulning ko‘rinishini boshqaruvchi oddiy, ammo foydali vosita.
# Misol:
__all__ = ['foydali_funktsiya', 'OmmaviyKlass']
📦 Foydalaning — kod yanada tushunarli va xavfsiz bo‘ladi!
#oddiy_tilda #class
Hamma class, class deyveradi class o'zi nima? Hech tushunolmayman🧐
class — bu obyektga yo‘naltirilgan dasturlash asosidagi shablon bo‘lib, u yordamida obyektlar (ya'ni real hayotdagi narsalarning dasturdagi modellari) yaratiladi.
Xop class obyektlar yaratish uchun shablon ekan, buni tushundim lekin nega men bu shablondan foydalanishim kerak, usiz kod yozolmaymanmi?
Albatta yozish mumkin, xuddiki bir kamaz tuproqni mashinada emas qo'lda tashiganday bo'lasiz xalos, tuproq oz bo'lsaku (kichik programmachalar) bilinmaydi, lekin juda ko'p bo'lsachi?
class — bu bir xil xususiyat va funksiyalarga ega obyektlar uchun shablon. E'tibor bering bir xil xususiyatga ega obyektlar uchun shablon.
Tasavvur qiling, siz ming xil odam qatnashgan o'yin yaratyapsiz. Endi har bir odam uchun noldan kod yozib chiqasizmi? Bitta odamni yasashga aytaylik 1 kun vaqtiz ketadi, shunda dasturni ming kunda bitirasizmi?
Shu joyda sizga class yordamga keladi, class so'zini tarjimasi sinf to'g'rimi? Siz to'g'ri tushundingiz biz o'yinda ishtirok etadigan obyektlarni sinflarga bo'lamiz, masalan mingta odamni bitta inson sinfiga tegishli deymiz. Ya'ni inson degan class yaratamiz va unga hamma insonlar uchun umumiy bo'lgan xususiyatlarni (boshi bor, ikkita qo'li, ikkita oyog'i bor, oyoqlari bilan yuradi va hokazo) shablon qilib kiritib qo'yamiz.
Nima deb o'ylaysiz endi ishimiz osonlashadimi? Albatta osonlashadi chunki biz bir marta shablon yozamiz va bu shablondan mingta odam obyektini yaratishda foydalanamiz bu orqali hammaga umumiy bo'lgan xususiyatlarni qayta yozib o'tirmay oldin yozilganidan foydalanamiz😀.
class larni yana ko'plab foydali imkoniyatlari bor va ular bilan keyingi postlarda tanishamiz.
Agar foydali bo'lgan bo'lsa reaksiya ❤️ qoldirishni unutmang.
Bu reaksiya bizga motivatsiya bo'ladi va tayyorlayotgan kontentimiz sifatining yanada oshishiga sabab bo'ladi
Hamma class, class deyveradi class o'zi nima? Hech tushunolmayman🧐
class — bu obyektga yo‘naltirilgan dasturlash asosidagi shablon bo‘lib, u yordamida obyektlar (ya'ni real hayotdagi narsalarning dasturdagi modellari) yaratiladi.
Xop class obyektlar yaratish uchun shablon ekan, buni tushundim lekin nega men bu shablondan foydalanishim kerak, usiz kod yozolmaymanmi?
Albatta yozish mumkin, xuddiki bir kamaz tuproqni mashinada emas qo'lda tashiganday bo'lasiz xalos, tuproq oz bo'lsaku (kichik programmachalar) bilinmaydi, lekin juda ko'p bo'lsachi?
class — bu bir xil xususiyat va funksiyalarga ega obyektlar uchun shablon. E'tibor bering bir xil xususiyatga ega obyektlar uchun shablon.
Tasavvur qiling, siz ming xil odam qatnashgan o'yin yaratyapsiz. Endi har bir odam uchun noldan kod yozib chiqasizmi? Bitta odamni yasashga aytaylik 1 kun vaqtiz ketadi, shunda dasturni ming kunda bitirasizmi?
Shu joyda sizga class yordamga keladi, class so'zini tarjimasi sinf to'g'rimi? Siz to'g'ri tushundingiz biz o'yinda ishtirok etadigan obyektlarni sinflarga bo'lamiz, masalan mingta odamni bitta inson sinfiga tegishli deymiz. Ya'ni inson degan class yaratamiz va unga hamma insonlar uchun umumiy bo'lgan xususiyatlarni (boshi bor, ikkita qo'li, ikkita oyog'i bor, oyoqlari bilan yuradi va hokazo) shablon qilib kiritib qo'yamiz.
Nima deb o'ylaysiz endi ishimiz osonlashadimi? Albatta osonlashadi chunki biz bir marta shablon yozamiz va bu shablondan mingta odam obyektini yaratishda foydalanamiz bu orqali hammaga umumiy bo'lgan xususiyatlarni qayta yozib o'tirmay oldin yozilganidan foydalanamiz😀.
class larni yana ko'plab foydali imkoniyatlari bor va ular bilan keyingi postlarda tanishamiz.
Agar foydali bo'lgan bo'lsa reaksiya ❤️ qoldirishni unutmang.
Bu reaksiya bizga motivatsiya bo'ladi va tayyorlayotgan kontentimiz sifatining yanada oshishiga sabab bo'ladi
❤1👍1
Inheritance va polymorphismni oddiy qilib tushuntirib berishimni xohlaganlar bormi?
Anonymous Poll
63%
Ha
25%
Albatta😂
13%
Yo'q
Class (sinf) – obyektlar uchun andoza
Class – bu siz yaratmoqchi bo‘lgan obyektlar (narsalar) uchun qolip (shablon).
Misol:
Obyekt yaratish:
Class – bu siz yaratmoqchi bo‘lgan obyektlar (narsalar) uchun qolip (shablon).
Misol:
class Car:
def __init__(self, brand, color):
self.brand = brand
self.color = color
def drive(self):
print(f"{self.color} {self.brand} yurmoqda.")
Obyekt yaratish:
my_car = Car("Tesla", "oq")
my_car.drive() # oq Tesla yurmoqda.
👍1🔥1
#oddiy_tilda #inheritance
Meros olish (inheritance) o'zi nima, qaydan kelib qoldi endi bu tushuncha?
Meros olish — bu yangi klass yaratishda, avvalgi klassdagi kodni qayta yozmasdan foydalanish imkonini beradi. Bu kodni takrorlamaslik, modullikni saqlash va kodni boshqarishni osonlashtirish uchun kerak.
Bir qarasa kodni takrorlamaslik uchun klass ishlatiladi deysizlar, bir qarasa meros olish kodni takrorlamaslik uchun kerak deysizlar, sizlar hazillashyapsizlarmi?
Yo'q albatta biz hazillashmayapmiz, siz haqsiz klass kodni qayta yozmaslikni ta'minlaydi, takrorlanishlarni oldini oladi, lekin biz meros olishni ham bilsak klassni o'zi bilan erisholmagan soddalashtirishlarni amalga oshiramiz.
Qanday qilib? Klass misolida ko'rgandik mingta odamni dasturda yaratishni va takrorlanishlarni oldini olish maqsadida ular uchun shablon hisoblangan inson degan sinf yaratgandik. Shu orqali kod yozishdagi takrorlanishlarni oldini olgandik, ishni tezlashtirgandik, lekin meros olish nimaga kerak?
Xuddi shu misolga qaytsak, biz dasturda mingta odamning obyektini yaratmoqchimiz, har birining kodini alohida yozmaslik uchun inson degan klass yaratdik va mingta odam uchun ham umumiy bo'lgan xususiyatlarni shu inson klassida jamladik, va bu ishimizni yengillashtirdi. Endi ishimizni bundan ham yengillashtirish imkoni bormi desak ha va bu meros olish orqali amalga oshiriladi:
mingta odam avvalo inson degan sinfga tegishli, lekin biz ularni yana sinf ichidagi sinflarga bo'lsak bo'ladi, ya'ni inson degan sinfni yana o'qituvchilar, duratgorlar, fudbolistlar sinflariga (class lari) bo'lsak bo'ladi.
Xop sinfni yana sinflarga bo'ldik ham deylik, biz inson degan sinfda hammaga umumiy bo'lgan xususiyatlarni jamlagandik, lekin endi biz o'qituvchi sinfini yaratmoqchimiz va faqatgina o'qituvchilar uchun umumiy bo'lgan xususiyatlar uchun shablon (class) yaratmoqchimiz. Shunda hamma insonlar uchun umumiy bo'lgan xususiyatlarni bu sinfda qayta yozmaslik uchun inson sinfidan meros qilib olamiz, meros qilib olishimiz tufayli endi o'qituvchi sinfi ichida hech nima yozmasak ham inson sinfi nimaga xususiyat va metodlarga (klassga tegishli bo'lgan funksiyalar) ega bo'lsa o'qituvchi sinfi ham shularga ega bo'ladi, va biz qo'shimcha qilib faqat o'qituvchilarga tegishli bo'lgan umumiy xususiyatlarni shu o'qituvchi sinfida shablon qilib yaratvolamiz.
Shunday qilib biz o'qituvchi klassidan obyekt yaratsak, bu obyekt inson sinfidagi xususiyatlarga ham ega bo'ladi. Shunday qilib kod yozishni yanada soddalashtirish va tezlashtirishga muvaffaq bo'lamiz.
class orqali obyektlar uchun shablon yaratgandik, meros olish orqali shu shablon class ni boshqa class lar uchun shablon sifatida ishlatsak bo'ladi!
Post uzun bo'lib ketgan bo'lsa uzur, yaxshiroq tushintirishga harakat qildim. Foydali bo'lgan bo'lsa reaksiya qoldirishni 👍 va do'stlarga ulashishni unutmang!
Meros olish (inheritance) o'zi nima, qaydan kelib qoldi endi bu tushuncha?
Meros olish — bu yangi klass yaratishda, avvalgi klassdagi kodni qayta yozmasdan foydalanish imkonini beradi. Bu kodni takrorlamaslik, modullikni saqlash va kodni boshqarishni osonlashtirish uchun kerak.
Bir qarasa kodni takrorlamaslik uchun klass ishlatiladi deysizlar, bir qarasa meros olish kodni takrorlamaslik uchun kerak deysizlar, sizlar hazillashyapsizlarmi?
Yo'q albatta biz hazillashmayapmiz, siz haqsiz klass kodni qayta yozmaslikni ta'minlaydi, takrorlanishlarni oldini oladi, lekin biz meros olishni ham bilsak klassni o'zi bilan erisholmagan soddalashtirishlarni amalga oshiramiz.
Qanday qilib? Klass misolida ko'rgandik mingta odamni dasturda yaratishni va takrorlanishlarni oldini olish maqsadida ular uchun shablon hisoblangan inson degan sinf yaratgandik. Shu orqali kod yozishdagi takrorlanishlarni oldini olgandik, ishni tezlashtirgandik, lekin meros olish nimaga kerak?
Xuddi shu misolga qaytsak, biz dasturda mingta odamning obyektini yaratmoqchimiz, har birining kodini alohida yozmaslik uchun inson degan klass yaratdik va mingta odam uchun ham umumiy bo'lgan xususiyatlarni shu inson klassida jamladik, va bu ishimizni yengillashtirdi. Endi ishimizni bundan ham yengillashtirish imkoni bormi desak ha va bu meros olish orqali amalga oshiriladi:
mingta odam avvalo inson degan sinfga tegishli, lekin biz ularni yana sinf ichidagi sinflarga bo'lsak bo'ladi, ya'ni inson degan sinfni yana o'qituvchilar, duratgorlar, fudbolistlar sinflariga (class lari) bo'lsak bo'ladi.
Xop sinfni yana sinflarga bo'ldik ham deylik, biz inson degan sinfda hammaga umumiy bo'lgan xususiyatlarni jamlagandik, lekin endi biz o'qituvchi sinfini yaratmoqchimiz va faqatgina o'qituvchilar uchun umumiy bo'lgan xususiyatlar uchun shablon (class) yaratmoqchimiz. Shunda hamma insonlar uchun umumiy bo'lgan xususiyatlarni bu sinfda qayta yozmaslik uchun inson sinfidan meros qilib olamiz, meros qilib olishimiz tufayli endi o'qituvchi sinfi ichida hech nima yozmasak ham inson sinfi nimaga xususiyat va metodlarga (klassga tegishli bo'lgan funksiyalar) ega bo'lsa o'qituvchi sinfi ham shularga ega bo'ladi, va biz qo'shimcha qilib faqat o'qituvchilarga tegishli bo'lgan umumiy xususiyatlarni shu o'qituvchi sinfida shablon qilib yaratvolamiz.
Shunday qilib biz o'qituvchi klassidan obyekt yaratsak, bu obyekt inson sinfidagi xususiyatlarga ham ega bo'ladi. Shunday qilib kod yozishni yanada soddalashtirish va tezlashtirishga muvaffaq bo'lamiz.
class orqali obyektlar uchun shablon yaratgandik, meros olish orqali shu shablon class ni boshqa class lar uchun shablon sifatida ishlatsak bo'ladi!
Post uzun bo'lib ketgan bo'lsa uzur, yaxshiroq tushintirishga harakat qildim. Foydali bo'lgan bo'lsa reaksiya qoldirishni 👍 va do'stlarga ulashishni unutmang!
👍1
Polymorphism (ko‘p shakllilik) ni qanchalik tushunasiz?
Anonymous Poll
60%
to'liq tushunaman, u yog'idan kirib bu yog'idan chiqib ketaman
20%
tushunaman lekin to'liqmas
20%
umuman tushunmayman, nima edi u o'zi
👍1🔥1
👨👦👦 Inheritance (meros olish) – boshqa classdan xususiyatlarni olish
Inheritance yordamida bir class boshqa classdan funksiya va xususiyatlarni meros oladi, ya’ni takror yozmasdan foydalanish mumkin.
Misol:
Avtomobil, Avtobus va Mototsikl classlari Transport classidan hamma transportlar uchun umumiy bo'lgan nomi, tezlik, yoqilgi kabi atributlar va harakatlan, toxta, info kabi metodlarni meros qilib oldi, keyin hammasi o'ziga tegishli bo'lgan atributlarni qo'shdi va info metodiga qo'shimcha kiritdi.
Inheritance yordamida bir class boshqa classdan funksiya va xususiyatlarni meros oladi, ya’ni takror yozmasdan foydalanish mumkin.
Misol:
# Superklass (umumiy klass)
class Transport:
def __init__(self, nomi, tezlik, yoqilgi):
self.nomi = nomi
self.tezlik = tezlik # km/soat
self.yoqilgi = yoqilgi
def harakatlan(self):
print(f"{self.nomi} {self.tezlik} km/soat tezlikda harakatlanmoqda.")
def toxta(self):
print(f"{self.nomi} to‘xtadi.")
def info(self):
print(f"Nomi: {self.nomi}, Tezlik: {self.tezlik} km/soat, Yoqilg‘i: {self.yoqilgi}")
# Subklasslar (avtomobil, avtobus, mototsikl) Transport klassidan meros oladi
class Avtomobil(Transport):
def __init__(self, nomi, tezlik, yoqilgi, eshiklar_soni):
super().__init__(nomi, tezlik, yoqilgi)
self.eshiklar = eshiklar_soni
def info(self):
super().info()
print(f"Eshiklar soni: {self.eshiklar}")
class Avtobus(Transport):
def __init__(self, nomi, tezlik, yoqilgi, yolovchilar_soni):
super().__init__(nomi, tezlik, yoqilgi)
self.yolovchilar = yolovchilar_soni
def info(self):
super().info()
print(f"Yo‘lovchilar sig‘imi: {self.yolovchilar} kishi")
class Mototsikl(Transport):
def __init__(self, nomi, tezlik, yoqilgi, turi):
super().__init__(nomi, tezlik, yoqilgi)
self.turi = turi # Masalan: sport, klassik
def info(self):
super().info()
print(f"Mototsikl turi: {self.turi}")
Avtomobil, Avtobus va Mototsikl classlari Transport classidan hamma transportlar uchun umumiy bo'lgan nomi, tezlik, yoqilgi kabi atributlar va harakatlan, toxta, info kabi metodlarni meros qilib oldi, keyin hammasi o'ziga tegishli bo'lgan atributlarni qo'shdi va info metodiga qo'shimcha kiritdi.
👍1