python - 在 python 的 __init__ 处获取装饰器内的方法类名

标签 python django decorator

我正在尝试以某种方式在类 (@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/

相关文章:

java - 如何在java运行时更改具体装饰器中的变量

iphone - 装饰模式问题,iOS/UICollectionViewCells

python - 有没有办法用 Pandas 轻松地将值与行组合在一起?

python - os.environ() 在设置 Hudson 时出错

python - Django - 从 django admin 编辑模板

python - Python 重载装饰器

python - Windows批处理文件运行Python脚本来检查安装的包版本?

python - 从一个列表中随机创建两个列表

django - 通过 Google Apps 使用 Django 发送电子邮件时为电子邮件帐户命名

python - django 查看 session ID - 未登录的用户缺少