如果我只知道 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 中的绑定方法,如何获取类的名称? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python Tkinter如何绑定Text内容改变事件?

Kivy,Python3.5 - 将用户文本输入绑定到类中的方法

php中只获取时间中的小时函数我只想知道现在是几点就可以了

在运行时获取IIS绑定

如果我只使用整数作为键,如何在本地存储中获取最后插入的键?

android如何获取drawable中图片的path?返回string路径