python - 从装饰器中获取 Python 函数的所属类

标签 python class function decorator inspect

我在 PY 有一个装饰器。它是一种方法,将函数作为参数。我想根据传递的函数创建一个目录结构。我正在为父目录使用模块名称,但想为子目录使用类名。我不知道如何获取拥有 fn 对象的类的名称。

我的装饰器:

def specialTest(fn):
    filename = fn.__name__
    directory = fn.__module__
    subdirectory = fn.__class__.__name__ #WHERE DO I GET THIS

最佳答案

如果fn是一个instancemethod,那么您可以使用fn.im_class

>>> class Foo(object):
...     def bar(self):
...         pass
...
>>> Foo.bar.im_class
__main__.Foo

请注意,这将在装饰器中工作,因为函数仅在定义类之后转换为实例方法(即,如果@ specialTest 用于装饰 bar,它不会工作;如果可能的话,在那个时候做它必须通过检查调用堆栈或其他同样不愉快的事情来完成)。

关于python - 从装饰器中获取 Python 函数的所属类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7680446/

相关文章:

c++ - 指向 C++ 类元素的指针

java - 在 toString() 中使用继承/扩展的具体类名

java - 如何生成.class文件?

python - 如何从 keras 中父模型的摘要中公开子模型的各层?

python - 为 Web 应用程序使用的 Python REST API 选择适当的身份验证类

function - Rust 仅在拆分为多个语句时才编译方法链

ruby - 根据用户输入循环创建

python - 通过在每个 df 列上应用函数来创建系列

python - 从 Python 调用 Perl 脚本不断返回值

python - Django-autocomplete-url 无效 URL