如何根据实例的方法获取实例?
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 给出的建议通常能让你很清楚你在找什么方法或属性。