How to get class name when there is attribute attached?
本问题已经有最佳答案,请猛点这里访问。
例如,
我想从以下位置返回'classname':
1 | ClassName().MethodName |
当我尝试时:
1 2 3 | ClassName().MethodName.__class__.__name__ >>instancemethod |
号
或者当我尝试时:
1 2 3 | ClassName().MethodName.__name__ >>MethodName |
也许这是不可能的,所以有一种方法可以将classname().methodname转换为classname(),这样我就可以运行它,这就是我想要的:
1 2 | ClassName().__class__.__name__ >> ClassName |
。
您需要的信息位于绑定方法对象的
1 2 3 4 5 6 7 | >>> class Foo(): ... def bar(): ... pass ... >>> m = Foo().bar >>> m.im_class <class __main__.Foo at 0x1073bda78> |
就像这样:
1 2 3 4 5 6 | class Foo(object): def MethodName(): pass print type(Foo()).__name__ # Foo |
或者,
1 2 3 | foo=Foo() print type(foo).__name__ # Foo |
号
(注意——这只适用于新样式类,而不是传统类。显然,只有当您知道调用什么来实例化类时,它才有效)
如果你所拥有的只是一种方法,你可以使用inspect(thx alex martelli):
1 2 3 4 5 6 7 8 9 10 | import inspect def get_class_from_method(meth): for cls in inspect.getmro(meth.im_class): if meth.__name__ in cls.__dict__: return cls return None >>> mn=Foo().MethodName >>> get_class_from_method(mn).__name__ Foo |
或者,对于用户定义的方法,可以执行以下操作:
1 2 | >>> mn.im_class.__name__ Foo |
。