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

时间:2012-02-15 13:02:54

标签: python django decorator

我试图以某种方式注册'类(@classmethod)中的一个方法,它有一个装饰器,可以在以后轻松调用它。

到目前为止,我已经在我的装饰师中试图获得整个'名称空间'没有结果。

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

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

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

更多信息

基本上,我试图分叉django-dajaxice并修改this装饰器以便能够注册完整路径函数(与classname一致),以便从AJAX调用例如my.namespace.views.MyView.as_view(...) (我知道它更复杂,我试图简化)

1 个答案:

答案 0 :(得分:1)

您可以使用类装饰器来注册您的方法:

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,它是一个内置的装饰器,它返回一个函数,它接受一个类作为它的第一个参数。在这种情况下,您可能不想使用(或模仿)它。