繁体   English   中英

从装饰器获取Python函数的拥有类

[英]Get Python function's owning class from decorator

我在PY有一个装饰师。 它是一种方法,并将该函数作为参数。 我想基于传递的函数创建一个基于目录的结构。 我使用父目录的模块名称,但希望使用类名作为子目录。 我无法弄清楚如何获取拥有fn对象的类的名称。

我的装饰者:

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

如果fninstancemethod ,那么你可以使用fn.im_class

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

请注意,这不适用于装饰器,因为定义类之后 ,函数只会转换为实例方法(即,如果@specialTest用于装饰bar ,它将无法工作;如果它甚至可能,则执行此操作这一点必须通过检查调用堆栈或同样不满意的事情来完成。

在Python 2中,您可以在方法对象上使用im_class属性。 在Python 3中,它将是__self__.__class__ (或type(method.__self__) )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM