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
相关产品推荐
相关产品推荐

