在python的__init__中获取decorator中的方法类名

我试图用一个装饰器以某种方式“注册”一个类(@classmethod)中的方法,以便以后能够轻松地调用它.

到目前为止,我已经尝试在装饰器中获取整个“命名空间”而没有结果.

我只能得到__module__但我无法得到这个方法所在的类的名称(因为我在__init__期间注册它,而不是在我的自定义装饰器中的__call__期间).

有没有办法实现这个目标?

我认为唯一的方法是检查整个文件并以某种方式测试每个类中是否存在方法,因此也接受检查解决方案

更多信息

基本上,我正在尝试分叉django-dajaxice并修改this装饰器以便能够注册完整路径函数(与classname一致)以便从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:方法参数的装饰器可能吗?


下一篇:php – Decorator模式中有什么用处?我的例子不起作用