我正在尝试以某种方式在类 (@classmethod
) 中使用装饰器“注册”一个方法,以便稍后能够轻松调用它。
到目前为止,我已经尝试在我的装饰器中获取整个“ namespace ”,但没有结果。
我只能得到__module__
但是我不能得到这个方法所在的类的名称(因为我在__init__
期间注册了它,不在我的自定义装饰器内的 __call__
期间)。
有什么办法可以实现吗?
我认为唯一的方法是检查
整个文件并以某种方式测试每个类中是否存在该方法,因此检查
解决方案也被接受
更多信息
基本上,我正在尝试 fork django-dajaxice 并修改 this装饰器能够注册完整路径函数(包含类名)以便从 AJAX 调用例如 my.namespace.views.MyView.as_view(...)
(我知道它更复杂,我正在努力简化)
最佳答案
您可以使用类装饰器来注册您的方法:
def register_methods(cls):
for name, method in cls.__dict__.items():
# register the methods you are interested in
@register_methods
class Foo(object):
def x(self):
pass
您可以将其与方法装饰器结合使用,以注释您感兴趣的方法,以便轻松识别它们。
顺便说一句,你提到 @classmethod
,这是一个内置的装饰器,它返回一个函数,该函数将一个类作为它的第一个参数。在这种情况下,您可能不想使用(或模拟)它。
关于python - 在 python 的 __init__ 处获取装饰器内的方法类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9293948/