基于python导入的工作原理,我遇到了一个我不理解的奇怪问题(我相信)
我定义了一个类,还有一个装饰器,它用值填充类变量(字典)。装饰器在其他模块中应用于函数,因此它们已在类中注册。这工作正常(我可以中断并看到已填充类变量)。但是,当我运行使我查找这些函数(在class变量中)的代码时,class变量是一个空字典。
event_cog.py
class Events(commands.Cog):
REactION_HANDLERS = dict()
def handle_reaction(reaction_emoji):
"""
allows you to register a function as a specific reaction handler for the embed representing an event
"""
def inner(func):
Events.REactION_HANDLERS[reaction_emoji] = func
return func
return inner
import b.py
b.py
import event_cog
@event_cog.handle_reaction(emo(":white_check_mark:",use_aliases=True))
async def event_white_check_mark_handler(
self,ctx,channel: TextChannel,member: discord.Member,message: Message
):
如果我在两次执行之后在装饰器中设置了一个断点
str(Events.REactION_HANDLERS)
'{\'✅\': <function event_white_check_mark_handler at 0x0584FBB8>,\'❌\': <function event_x_handler at 0x05835D68>}'
稍后任何时候我的代码仍想访问这些功能...
str(Events.REactION_HANDLERS)
'{}'