加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:26:39 所属栏目:Python 来源:网络整理
导读:我试图用一个装饰器以某种方式“注册”一个类(@classmethod)中的方法,以便以后能够轻松地调用它. 到目前为止,我已经尝试在装饰器中获取整个“命名空间”而没有结果. 我只能得到__module__但我无法得到这个方法所在的类的名称(因为我在__init__期间注册它,而
我试图用一个装饰器以某种方式“注册”一个类(@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,它是一个内置的装饰器,它返回一个函数,它接受一个类作为它的第一个参数.在这种情况下,您可能不想使用(或模拟)它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读