Python中通过函数指针调用类方法:为何能保留self上下文?
Python绑定方法的上下文保留机制解析
先看你提供的代码:
global_list = [] class class1: def __init__(self): global_list.insert(0,self.method1) self.label = "class 1" def method1(self): print(self.label) class class2: def __init__(self): self.label = "class 2" def method2(self): global_list[0]() ob1 = class1() ob2 = class2() ob2.method2()
核心原因是Python的绑定方法(bound method)特性:
- 当你从实例(比如
ob1)上访问类定义的方法(method1)时,Python不会直接返回原始的函数对象,而是返回一个「绑定方法对象」——这个对象已经把实例本身和函数绑定在了一起。 - 你把
self.method1插入global_list时,存入的就是这个绑定方法对象,它内部保存了两个关键信息:class1中定义的method1函数,以及绑定的实例ob1。 - 当你调用
global_list[0]()时,这个绑定方法会自动把它保存的实例ob1作为第一个参数(也就是self)传给原始的method1函数,所以method1里的self.label自然就是ob1的label值"class 1"。
简单说:绑定方法相当于一个“包裹器”,帮你记住了要调用的函数和对应的实例,调用时自动把实例传给函数的self参数,不需要手动传递。
内容的提问来源于stack exchange,提问作者C Marius
相关产品推荐
相关产品推荐

