在BasePlugin
模块中,我定义了两个主要内容。一个名为BasePlugin
的类和一个不属于名为ValidateEvent
的类的修饰符。在
当我编写插件并运行时:
from BasePlugin import *
这是可行的,我可以在plugin类内的方法上使用decorator。在
但是,如果我试图在BasePlugin
类中修饰一个方法,它就找不到装饰器。在
我尝试了很多方法来引用decorator,甚至尝试将其导入到它自己的模块中,但似乎没有任何效果。我不想为decorator创建另一个模块。在
是否可以在同一个模块中定义的类中引用一个decorator,但不是该类的一部分?在
编辑:下面是一段有问题的代码
#BasePlugin.py
class BasePlugin():
def __init__(self, event_manager):
pass
@ValidateEvent
def ProvideModeEventHandler(self, event):
self._mode = event.Message
def ValidateEvent(func):
"""
Decorator used to check if the event(s) fired should be
handled by the plugin.
"""
def new_func(plugin, event, *args, **kwargs):
if plugin.Name == event.Name or event.Name == '':
return func(plugin, event, *args, **kwargs)
return new_func
您的问题在于模块中定义的顺序。当您使用
ValidateEvent
作为BasePlugin
类中某个方法的修饰符时,它需要在全局命名空间中已经可用,因为在定义方法时(不仅是在调用方法时),装饰器会立即运行。在在您展示的代码片段中,
ValidateEvent
定义在类定义下面,因此Python解释器还不知道它。在要解决此问题,请将decorator的定义移到类定义之上:
相关问题 更多 >
编程相关推荐