如何根据实例的方法获取实例?

26 投票
3 回答
14680 浏览
提问于 2025-04-17 14:05
class MyClass:
    def myMethod(self):
        pass

myInstance = MyClass()

methodReference = myInstance.myMethod

现在,如果你只有 methodReference 的访问权限,你能否获取到 myInstance 的引用呢?

3 个回答

1

你可以自己搞明白这个问题,看看 dir 命令的输出结果:

>>> dir(mr)
['__call__', ... '__str__', '__subclasshook__', 'im_class', 'im_func', 'im_self']

那些 im_* 开头的东西是指为 实例方法 定义的属性……

它们是在哪个类里定义的、函数的代码块,以及它们绑定到哪个对象上……

39

试试这个:

methodReference.im_self

如果你在用Python 3的话:

methodReference.__self__
9

如果你在使用 Python 3:

methodReference.__self__

否则:

methodReference.im_self

同样,对于这个类来说:

methodReference.im_class

要进行这种代码查找,你应该安装 iPython,并在需要的时候按下 Tab 键,比如在你的例子中,输入 myReference.+TAB 会显示:

In [6]: methodReference. methodReference.im_class 
methodReference.im_func   methodReference.im_self

因此,你不需要太担心记住所有的东西——你知道这个方法很可能是由函数对象提供的,而 iPython 给出的建议通常能让你很清楚你在找什么方法或属性。

撰写回答