Проект пишется на Python aiogram.
Есть функция show_cpanel, которая вызывается из эндпоинтов aiogram.
Есть 2 варианта реализации этой функции:
- Сделать единую функцию, немного заморочившись с её параметрами. Тело функции будет немного больше.
- Перегрузка функции с помощью декоратора
overload
. Тело функции будет немного меньше.
Вот эти 2 варианта:
async def show_cpanel(
state: FSMContext,
callback_query: Optional[CallbackQuery] = None,
message: Optional[Message] = None,
) -> None:
'''
Send control panel to current user
'''
assert callback_query or message
if callback_query:
this_user = callback_query.from_user.id
message = message or callback_query.message
else:
this_user = message.from_user.id
profile_is_visible = await req.check_profile_visible(this_user)
message_id = (await message.answer(
'<b>' + _('Панель управления') + '</b>',
parse_mode='HTML',
reply_markup=kb.control_panel(profile_visible=profile_is_visible)
)).message_id
await state.update_data(cpanel_message_id=message_id)
logger.info(f'Admin #{this_user} opened control panel')
или
@typing.overload
async def show_cpanel(
state: FSMContext,
callback_query: CallbackQuery
) -> None:
'''
Send control panel to current user
'''
this_user = callback_query.from_user.id
profile_is_visible = await req.check_profile_visible(this_user)
message_id = (await callback_query.message.answer(
'<b>' + _('Панель управления') + '</b>',
parse_mode='HTML',
reply_markup=kb.control_panel(profile_visible=profile_is_visible)
)).message_id
await state.update_data(cpanel_message_id=message_id)
logger.info(f'Admin #{this_user} opened control panel')
@typing.overload
async def show_cpanel(
state: FSMContext,
message: Message
) -> None:
'''
Send control panel to current user
'''
this_user = message.from_user.id
profile_is_visible = await req.check_profile_visible(this_user)
message_id = (await message.answer(
'<b>' + _('Панель управления') + '</b>',
parse_mode='HTML',
reply_markup=kb.control_panel(profile_visible=profile_is_visible)
)).message_id
await state.update_data(cpanel_message_id=message_id)
logger.info(f'Admin #{this_user} opened control panel')
Который из вариантов будет правильнее с точки зрения чистоты кода и его дальнейшей поддержки?