如何为自定义函数创建单独的 class?

How to create a separate class for a custom function?

我必须在邮件中找到 user_id 和 order_id,但我想为该搜索单独创建一个 class。我只是想优化我的代码。

我已经突出显示了一部分代码(#-----),我想将其塞进一个单独的文件中,但是由于我是初学者,所以我不明白如何实现它。请告诉我,或者至少有一个类似的例子自己弄清楚。

这是我的代码:

@dp.callback_query_handler(text="accept_ord", state=None)
    async def process_order_callback_4(query: types.CallbackQuery):
    answ_date_2=query.data

#------------
    #find the text from message
    text = str(query.message.text)
    #find id_order from the text of the message
    id = text.split('\n')[0].split("№ ")[1]
    #from str to int
    id_1 = int(re.search('\d+', id).group(0))
    #find id_user from table_2 in db
    cl_id = str(db.get_user_id_admin(id_1))
    #from str to int
    cl_id_1 = int(re.search('\d+', cl_id).group(0))
    #find id_user from table_1 in db
    user_id = str(db.get_user_telegram_id_admin(cl_id_1))
    user_id_clear=int(re.search('\d+', user_id).group(0))
    #------------

    await bot.send_message(user_id_clear,
                           text=f'The status of the order has been change №{id_1} изменен!\n\nPlease check main menu (/start)')
    if answ_date_2 == "accept_ord":
        status = 2
        db.set_new_status(id_1, status)

        await bot.send_message(query.from_user.id, text=f'The order №{id_1} has been assepted.', reply_markup=nav.back_admin_menu_order)

它看起来很诡异,但它确实有效,哈哈。

避免沉迷于 class; a class 有一个不应该被滥用的独特理论。但是,正如您所指出的,您的代码似乎有点冗长,我建议如下:

@dp.callback_query_handler(text="accept_ord", state=None)
async def process_order_callback_4(query: types.CallbackQuery):
    answ_date_2=query.data

    #------------
    id_1, user_id_clear = await __mySearch(query)
    #------------
    
    await bot.send_message(user_id_clear,
                           text=f'The status of the order has been change №{id_1} изменен!\n\nPlease check main menu (/start)')
    if answ_date_2 == "accept_ord":
        status = 2
        db.set_new_status(id_1, status)
    
        await bot.send_message(query.from_user.id, text=f'The order №{id_1} has been assepted.', reply_markup=nav.back_admin_menu_order)


async def __mySearch(query):
    #find the text from message
    text = str(query.message.text)
    #find id_order from the text of the message
    id = text.split('\n')[0].split("№ ")[1]
    #from str to int
    id_1 = int(re.search('\d+', id).group(0))
    #find id_user from table_2 in db
    cl_id = str(db.get_user_id_admin(id_1))
    #from str to int
    cl_id_1 = int(re.search('\d+', cl_id).group(0))
    #find id_user from table_1 in db
    user_id = str(db.get_user_telegram_id_admin(cl_id_1))
    user_id_clear = int(re.search('\d+', user_id).group(0))
    return id_1, user_id_clear

注意:对于某些任务,构建一个 utils.py 可以接受,它通常使用提供的参数和 returns 期望的结果来完成任务。它可以被提取到另一个文件中并在您的文件中调用,例如 import myFile(有关更多信息,请参阅此 thread