我的问题与绑定方法对象有关,更具体地说,我试图模仿函数(本质上是描述符)存在的相同行为。
让我先在这里说明我对 class_instance.function() 工作原理的理解
Class D(object):
def dfunc(self):
...
d=D()
d.dfunc() # will call D.__dict__['dfunc'].__get__(d,D)()
#gives a bound method which can be used directly
a=D.__dict__['dfunc'].__get__(d,D)
a() #works as d.D()
Python 是否调用D.__dict__['dfunc'] (d)
, 以防何时type(dfunc)
是函数且type(d).__dict__['dfunc'].__get__(d, type(d))
x 是类实例?
现在来谈谈我如何尝试使用闭包创建绑定对象:
class E(object):
def __get__(self,obj,cls):
def returned(*args):
print(obj.__dict__)
return returned
class F(object):
e=E()
y=9
f=F()
f.fvar=9 #putting something in instances __dict__
a=f.e #will call the __get__ function of F and return a closure
a() #works and produces instance specific result -> {'fvar': 9}, just like a bound method
现在的主要问题是,当我做a=D.__dict__['dfunc'].__get__(d,D)
type(a) 时是绑定方法,但是当我实现它时type(a)
是函数;有没有办法从用户定义的描述符返回绑定对象?
有没有更好的方法来实现像描述符这样的功能?如果我脑子里有一些根本不正确的东西,请纠正我。