Kings Of Python
1.06K subscribers
123 photos
25 videos
120 files
129 links
🐍 Pythonda songi va tarqalmagan kodlar kanali: @KingsOfPy

βš™οΈ JavaScriptda so'ngi va tarqalmagan kodlar kanali: @Kings_of_Js

πŸ—„οΈDevOps uchun eng kerakli va foydali kanal @kingsofdevops

Admin : @Mistrdev
Download Telegram
Forwarded from IT Tech | πŸ‡ΊπŸ‡Ώ (dev-au πŸ‡΅πŸ‡Έ)
#optimize_code
Hozir aiogramda bir skript yaratgan edim, aiogramda ishni ancha qulay qiladi

from aiogram.types import ReplyKeyboardMarkup, KeyboardButton


class KeyboardBuilder:
__row__: int
__reverse__: bool

def __init_subclass__(cls, row: int, reverse: bool) -> None:
cls.__row__ = row
cls.__reverse__ = reverse

def __new__(cls) -> ReplyKeyboardMarkup:
keyboards = [[]]
buttons = cls.__dict__

for key, value in buttons.items():
if not key.startswith("__") and isinstance(value, str):
if len(keyboards[-1]) == cls.__row__:
keyboards.append([])
keyboards[-1].append(KeyboardButton(text=value))

if cls.__reverse__:
keyboards = keyboards[::-1]
return ReplyKeyboardMarkup(keyboard=keyboards, resize_keyboard=True)


Ushbu klass, reply keyboardlarni tezkor yaratish va filtrlash imkonini beradi, negadir hozircha pycharm meni kodimni tanimayapti, lekin kod xatosiz ishlamoqda. Undan foydalanish quyidagicha

class StartMenu(KeyboardBuilder, row=2, reverse=True):
sign_up = 'Ro\'yxatdan o\'tish'
sign_in = 'Kirish'
statistics = 'Statistika'

Bu yerda row=2 => 2qatorli menyu yaratildi, tugmalar soni 3ta bo'lgani uchun, bitta tugma alohida qoladi, reverse esa teskari tartiblaydi ya'ni 1-yakka tugma statistika bo'lsa, pastda qolgan 2tasi, agar reverse bo'lmasa statistika oxirida yakka qoladi. Foydalanish esa quyidagicha:

await message.answer('Yana bir bor assalomu alaykum!', reply_markup=StartMenu())


Tugmalarni filterlash ham oson

@dp.message(F.text == StartMenu.statistics)


Pycharm biroz tanimay, qizg'ish tursa ham, yaxshi optimizatsiya. Just use it!
πŸ‘5πŸ”₯2