如何提取作为函数传递的实例函数的属性?

时间:2014-07-19 09:31:24

标签: python python-3.x

如何从以下方法对象中提取“SimpleSubscriber对象”的属性?

<bound method SimpleSubscriber.process of <__main__.SimpleSubscriber object at 0x2ede150>>

此对象已作为函数传递,但是如上所述,它是实例的函数。我想从这个函数所在的实例中引用上面的对象(保存在不同类中的列表中)。

dir()中的任何内容似乎都没有帮助。

实例中的

self返回:

<__main__.SimpleSubscriber object at 0x2ede150>

所以这个实例不能在自己的方法中从其他类中引用它自己。

所以基本上,我试图访问

的属性
<__main__.SimpleSubscriber object at 0x2ede150>

<bound method SimpleSubscriber.process of <__main__.SimpleSubscriber object at 0x2ede150>>

我正在尝试提取实例的唯一标识符。这可能吗?

1 个答案:

答案 0 :(得分:0)

绑定方法保存对原始函数及其绑定的实例的引用;这是它在实例中传递的方式,作为调用方法时的第一个参数。

如果您想访问它所绑定的实例,请使用__self__属性:

>>> class Foo:
...     def bar(self):
...         pass
... 
>>> bound_bar = Foo().bar
>>> bound_bar
<bound method Foo.bar of <__main__.Foo object at 0x101e5f6d8>>
>>> bound_bar.__self__
<__main__.Foo object at 0x101e5f6d8>

然后,您可以访问该实例所需的任何属性,包括方法本身:

>>> bound_bar.__self__.bar
<bound method Foo.bar of <__main__.Foo object at 0x101e5f6d8>>

这些属性记录在Datamodel reference中,但为了快速概述inspect module has a handy table