You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

python-telegram-bot:如何给回调函数传递额外参数(类中传self)

解决Telegram机器人类中CommandHandler调用类方法的问题

你遇到的问题源于对CommandHandler的args参数用法误解,类的实例方法本身已自动绑定self,无需额外通过args传递。以下是修正后的可运行代码:

# 修正后的极简机器人类
from telegram.ext import Application, CommandHandler

class Minimal_Example_Bot():
    def __init__(self, token, name: str):
        self.token = token
        self.name = name

    async def hi(self, update, context):
        # 直接调用实例的name属性,self已被方法自动绑定
        await update.message.reply_text(f"{self.name} says: 'Hi!!!'")
       
    def start(self):
        application = Application.builder().token(self.token).build()
        # 直接传递实例方法即可,无需args参数
        application.add_handler(CommandHandler("hi", self.hi))
        application.run_polling()
       
bot = Minimal_Example_Bot(token="你的机器人token", name="BestBot")
bot.start()

核心说明

  • 类的实例方法(如hi)被调用时,Python会自动将实例对象作为第一个参数(即self)传入,不需要手动通过CommandHandler的args传递。
  • 你之前代码中尝试使用的args[0].name是错误的,CommandHandler的args参数用于给回调函数传递固定额外参数,并非用来传递类实例本身。

若特殊场景下需要手动绑定参数(比如使用未绑定的类方法),可借助functools.partial包装,但对于实例方法而言完全没必要,直接传递self.hi即可满足需求。

内容的提问来源于stack exchange,提问作者A_N_96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 13:08:19