"""
动态绑定函数 实例化对象 使用的方法是 bound method 类使用的是 function
每个 function的建立都有 descriptor_get函数 建立一个method
在进行mro时 如对象空间没有需要去类空间找 就会触发descriptor_get函数
"""
# case 1 函数定义在类上A.f = func
class A:
def go(self):
pass
def func(self, data):
# print(self.name)
print(data)
# a = A()
# a.f = func
# a.name = "phil"
# a.f(a,"1")
A.f = func # 给类A增加一个function普通函数f 映射的是 func
o = A()
# print(o.go) > 这是一个bound method
print(A.__dict__) # 部分{ 'f': } A里面存在f
print(o.__dict__) # {} 实例化对象o空间里啥都没有啥都没有
A.f(o, "hello") # 需要填个self
o.f("he") # 由于有实例化对象o 啥都没有 实例空间没有 就去类空间找 找到了 这样拿到的不是A.f 而是一个函数(A.f的 descriptor_get)的返回值 bound method
# case2 函数定义在对象上 o.f = func
class A:
pass
def func(self, data):
# print(self.name)
print(data)
o = A()
o.f = func
o.f(o,"hello")
o.f("hello") # 由于定义到了对象上 所以o空间直接有 没去其他地方上找 不会触发MRO广度优先)就不会寻找 descriptor_get函数 所以这是个function 需要o.f(o,"hello")