鱼C论坛

 找回密码
 立即注册
查看: 3704|回复: 2

[已解决]这段代码是怎么运行的呢

[复制链接]
发表于 2017-4-14 09:21:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class  MyProperty:
    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)
最佳答案
2017-4-14 09:59:46
本帖最后由 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

  1. >>> c = C()
  2. >>> c.x = 1
  3. >>> c.x
  4. 'haha1'
  5. >>> del c.x
复制代码



还有x前面如果不加 _ 就会变成一个死循环 为什么呢?新手不懂啊啊啊啊
同名了肯定循环,比如
  1. class C:
  2.     def __init__(self):
  3.         self._x = None
  4.     def getX(self):
  5.         return self._x
  6.     def setX(self,value):
  7.         self._x = value
  8.     def delX(self):
  9.         del self._x
  10.     _x = MyProperty(getX,setX,delX)
复制代码


init中的self._x = None触发setX函数
setX中 self._x = value,又触发setX,就循环了

具体小甲鱼有详细的解释http://bbs.fishc.com/forum.php?m ... peid%26typeid%3D403
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-14 09:44:21 | 显示全部楼层
还有x前面如果不加 _ 就会变成一个死循环 为什么呢?新手不懂啊啊啊啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-14 09:59:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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

  1. >>> c = C()
  2. >>> c.x = 1
  3. >>> c.x
  4. 'haha1'
  5. >>> del c.x
复制代码



还有x前面如果不加 _ 就会变成一个死循环 为什么呢?新手不懂啊啊啊啊
同名了肯定循环,比如
  1. class C:
  2.     def __init__(self):
  3.         self._x = None
  4.     def getX(self):
  5.         return self._x
  6.     def setX(self,value):
  7.         self._x = value
  8.     def delX(self):
  9.         del self._x
  10.     _x = MyProperty(getX,setX,delX)
复制代码


init中的self._x = None触发setX函数
setX中 self._x = value,又触发setX,就循环了

具体小甲鱼有详细的解释http://bbs.fishc.com/forum.php?m ... peid%26typeid%3D403
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 02:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表