
[英]Get function or class method name from inside decorator in 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
如果fn
是instancemethod
,那么你可以使用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.