如何为自定义函数创建单独的 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)
我必须在邮件中找到 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)