如果我只知道 python 中的绑定方法,如何获取类的名称? [复制]
Posted
技术标签:
【中文标题】如果我只知道 python 中的绑定方法,如何获取类的名称? [复制]【英文标题】:How to get name of class if I know only a bound method in python? [duplicate] 【发布时间】:2013-04-02 05:32:25 【问题描述】:在 pyton 代码中,我有一些对象的绑定方法。只知道这个绑定方法我想知道那个对象的类是什么。有可能吗?
这里是示例代码:
>>> class x:
... def method(self):
... pass
...
>>> x
<class __main__.x at 0xb737d1ac>
>>> x_instance = x()
>>> x_instance
<__main__.x instance at 0xb737c7cc>
>>> boundmethod = x_instance.method
>>> boundmethod
<bound method x.method of <__main__.x instance at 0xb737c7cc>>
>>> str(boundmethod)
'<bound method x.method of <__main__.x instance at 0xb737c7cc>>'
假设我只知道boundmethod
。如何确定类是x
?
【问题讨论】:
看了this的问题后,我知道我可以像boundmethod.im_self.__class__.__name__
一样做某事。有没有更简单的方法?
为什么会有更简单的方法?为什么要传递绑定方法而不是它们绑定的对象?
看着 jamylak 评论我终于找到了解决方案:boundmethod.im_class.__name__
。谢谢。
@running.t 下次试试dir(...)
,因为你是如此接近,如果你这样做了,你会发现它
@Wooble:绑定方法是 Python 世界中的一等公民,并且有非常明显的理由“传递”绑定方法而不是实例 - 例如,作为回调......现在我同意除了 1/ 调试和 2/ 极少数极端情况外,我认为没有太多理由尝试找到绑定实例的类。
【参考方案1】:
如果你想要它的名字:
boundmethod.im_class.__name__
或者在 python 3 中:
boundmethod.__self__.__class__.__name__
【讨论】:
你好 - 只是想澄清一下;如果boundmethod
附加到具有继承层次结构的实例,并且boundmethod
存在于该层次结构的底部,则boundmethod.im_class
将指向定义它的类,还是指向boundmethod
的类?
@GershomMaes 我相信它应该指向boundmethod
的班级如果我的解释正确的话以上是关于如果我只知道 python 中的绑定方法,如何获取类的名称? [复制]的主要内容,如果未能解决你的问题,请参考以下文章