马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
为什么下面的gettter\setter\deleter方法需要return self ?class PropertyL:
def __init__(self, fget=None, fset=None, fdel=None):
self.fget = fget
self.fset = fset
self.fdel = fdel
def __get__(self, instance, owner):
return self.fget(instance)
def __set__(self, instance, value):
self.fset(instance, value)
def __delete__(self, instance):
self.fdel(instance)
def getter(self, func):
self.fget = func
return self
def setter(self, func):
self.fset = func
return self
def deleter(self, func):
self.fdel = func
return self
你了解了修饰符的本质就明白为什么要 return self 了
就拿你上一个问题的这个类来讲:class D:
def __init__(self):
self._x = 250
@PropertyL
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
首先
@PropertyL
def x(self):
相当于 x = PropertyL(x),这时候 x 函数变成了一个 PropertyL 实例
然后
@x.setter
def x(self, value):
相当于 x = s.setter(x),如果你不return self 的话,函数的返回值默认为 None,这时候 x 就成为了 None 了
最后
@x.deleter
def x(self):
相当于 x = x.deleter(x) ,如果 x 成为了 None,None 是没有 deleter 方法的,这里就会出错,
所以要 return self,因为 self 是 PropertyL 实例,PropertyL 实例有 deleter 方法
也就是说 return self 了之后才能支持这样的链式调用
|