这段代码是怎么运行的呢
classMyProperty: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)
class C:
def __init__(self):
self._x = None
def getX(self):
return self._x
def setX(self,value):
self._x = value
def delX(self):
del self._x
x = MyProperty(getX,setX,delX) 还有x前面如果不加 _ 就会变成一个死循环 为什么呢?新手不懂啊啊啊啊 本帖最后由 zlj19931010 于 2017-4-14 10:18 编辑
给class C定义一个x属性,x是你自定义类MyProperty的实例,
x = MyProperty(getX,setX,delX)
MyProperty中
当要获取x值的时候触发__get__()执行class C中的getX函数 c.x
当要修改x值的时候触发__set__()执行class C中的setX函数 c.x = 12
当要删除x值的时候触发__delete__()执行class C中的delX函数 del c.x
>>> c = C()
>>> c.x = 1
>>> c.x
'haha1'
>>> del c.x
还有x前面如果不加 _ 就会变成一个死循环 为什么呢?新手不懂啊啊啊啊
同名了肯定循环,比如
class C:
def __init__(self):
self._x = None
def getX(self):
return self._x
def setX(self,value):
self._x = value
def delX(self):
del self._x
_x = MyProperty(getX,setX,delX)
init中的self._x = None触发setX函数
setX中 self._x = value,又触发setX,就循环了
具体小甲鱼有详细的解释http://bbs.fishc.com/forum.php?mod=viewthread&tid=51106&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
页:
[1]