| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
class MyDes: 
    def __init__(self,value=None,name=None): 
        self.value=value 
        self.name=name 
    def __get__(self, instance, owner): 
        print('正在获取变量',self.name) 
        return self.value 
    def __set__(self, instance, value): 
        print('正在修改变量', self.name) 
        self.value = value 
    def __delete__(self,instance): 
        print('正在删除变量', self.name) 
 
class dd: 
        x=MyDes(5,'xiaojiayu') 
 
执行结果 
 
cc=dd() 
正在获取变量 xiaojiayu 
正在获取变量 xiaojiayu 
cc.x='xxx' 
正在修改变量 xiaojiayu 
正在获取变量 xiaojiayu 
 
为什么在赋值阶段就会得到'正在获取变量 xiaojiayu'输出, 
而且刚敲下cc.x上面又出现一行正在获取变量 xiaojiayu, 
不知道问题出在哪了,求助大神们  
 
你使用的应该是 PyCharm 中的控制台,所以在你打下 cc.x 时 未回车就会有打印情况 
 
这是因为 PyCharm 是独立的虚拟环境,导致可能会在你实际未调用过程中先进行了访问,是正常现象,不会影响你正常使用 
 
你可以将 cc=dd()、 cc.x = "xxx" 写入代码中去一同测试,就不会出现多重打印的情况,即: 
 
- class MyDes:
 
 -     def __init__(self,value=None,name=None):
 
 -         self.value=value
 
 -         self.name=name
 
 -     def __get__(self, instance, owner):
 
 -         print('正在获取变量',self.name)
 
 -         return self.value
 
 -     def __set__(self, instance, value):
 
 -         print('正在修改变量', self.name)
 
 -         self.value = value
 
 -     def __delete__(self,instance):
 
 -         print('正在删除变量', self.name)
 
  
- class dd:
 
 -         x=MyDes(5,'xiaojiayu')
 
  
- cc=dd()
 
 - cc.x='xxx'
 
  复制代码 
 
 
 
 |   
 
 
 
 |