附加属性时如何获取类名? [复制]
Posted
技术标签:
【中文标题】附加属性时如何获取类名? [复制]【英文标题】:How to get class name when there is attribute attached? [duplicate] 【发布时间】:2014-06-22 09:02:39 【问题描述】:例如,
我想从以下返回“ClassName”:
ClassName().MethodName
当我尝试时:
ClassName().MethodName.__class__.__name__
>>instancemethod
或者当我尝试时:
ClassName().MethodName.__name__
>>MethodName
也许这是不可能的,那么有没有办法将 ClassName().MethodName 转换为 ClassName(),这样我就可以运行它,这就是我想要的:
ClassName().__class__.__name__
>> ClassName
【问题讨论】:
repr(method_name).rpartition('.')[-1].split()[0]
【参考方案1】:
你要的信息在绑定方法对象的im_class
属性中:
>>> class Foo():
... def bar():
... pass
...
>>> m = Foo().bar
>>> m.im_class
<class __main__.Foo at 0x1073bda78>
【讨论】:
【参考方案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
【讨论】:
这似乎没有回答OP的问题,它给出了一个方法,如何获取类的名称 我仍然收到instancemethod 立即尝试(使用最后两种方法。)这是新式还是旧式类?以上是关于附加属性时如何获取类名? [复制]的主要内容,如果未能解决你的问题,请参考以下文章