我试图以某种方式注册'类(@classmethod
)中的一个方法,它有一个装饰器,可以在以后轻松调用它。
到目前为止,我已经在我的装饰师中试图获得整个'名称空间'没有结果。
我只能获得__module__
,但我无法获取此方法所在类的名称(因为我在__init__
期间注册了它,而不是在我的自定义装饰器中的__call__
。
有没有办法实现这个目标?
我认为唯一的方法是inspect
整个文件并以某种方式测试每个类中是否存在方法,因此也接受inspect
个解决方案
基本上,我试图分叉django-dajaxice并修改this装饰器以便能够注册完整路径函数(与classname一致),以便从AJAX调用例如my.namespace.views.MyView.as_view(...)
(我知道它更复杂,我试图简化)
答案 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
,它是一个内置的装饰器,它返回一个函数,它接受一个类作为它的第一个参数。在这种情况下,您可能不想使用(或模仿)它。