gpt4 book ai didi

python - 类方法中的装饰器

转载 作者:行者123 更新时间:2023-12-04 10:00:00 25 4
gpt4 key购买 nike

我正在尝试在我的类中的方法上应用另一个类的装饰器......
这是我对这个 Telegram API 包装库的实现:
https://github.com/eternnoir/pyTelegramBotAPI

但是在我的示例中,我不想从脚本中使用它 - 而是作为类的方法使用它:

class Bot:

def __init__(self, key):
self.key = key
self.bot=telebot.TeleBot(key)

def start(self):
self.bot.polling()

# Handle '/start' and '/help'
@self.bot.message_handler(commands=['help', 'start'])
def send_welcome(self,message):
self.bot.reply_to(message, """\
Hi there, I am EchoBot. \
I am here to echo your kind words back to you. \
Just say anything nice and I'll say the exact same thing to you!\
""")


# Handle all other messages with content_type 'text' (content_types defaults to ['text'])
@self.bot.message_handler(func=lambda message: True)
def echo_message(message):
self.bot.reply_to(message, message.text)

全部 self被突出显示......当然不起作用 - 如果有人能解释我做错了什么,我会很高兴吗?
尝试自定义的原始示例是:
import telebot

bot = telebot.TeleBot("TOKEN")

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.reply_to(message, "Howdy, how are you doing?")

@bot.message_handler(func=lambda message: True)
def echo_all(message):
bot.reply_to(message, message.text)

bot.polling()

最佳答案

对于那些可能需要它的人 - 我发现的解决方案 - 是将函数放在 Ctor 中 - 而不是将装饰器应用于类方法......:

class Bot:

def __init__(self, key,greting):
self.key = key
self.bot=telebot.TeleBot(key)
self.greting=greting

# Handle '/start' and '/help'
@self.bot.message_handler(commands=['help', 'start'])
def send_welcome(self, message):
self.bot.reply_to(message,self.greting )

# Handle all other messages with content_type 'text' (content_types defaults to ['text'])
@self.bot.message_handler(func=lambda message: True)
def echo_message(message):
self.bot.reply_to(message, message.text)

def start(self):
x = threading.Thread(name=self.greting, target=self.bot.polling,)
x.start()

关于python - 类方法中的装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61854767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com