例如,
我想要返回' ClassName'来自以下内容:
ClassName().MethodName
当我尝试:
ClassName().MethodName.__class__.__name__
>>instancemethod
或当我尝试:
ClassName().MethodName.__name__
>>MethodName
也许这是不可能的,所以有没有办法将ClassName()。MethodName转换为ClassName(),所以我可以运行它,这就是我想要的:
ClassName().__class__.__name__
>> ClassName
答案 0 :(得分:3)
您需要的信息位于绑定方法对象的im_class
属性中:
>>> class Foo():
... def bar():
... pass
...
>>> m = Foo().bar
>>> m.im_class
<class __main__.Foo at 0x1073bda78>
答案 1 :(得分:2)
像这样:
class Foo(object):
def MethodName():
pass
print type(Foo()).__name__
# Foo
或者,
foo=Foo()
print type(foo).__name__
# Foo
(注意 - 这只适用于新的样式类,而不适用于遗留类。显然只有在知道调用实例化类的方法时才有效)
如果您只拥有方法,则可以使用inspect(Thx Alex Martelli):
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
或者,对于user defined method,您可以执行以下操作:
>>> mn.im_class.__name__
Foo