duolamengA 发表于 2022-1-27 22:08:33

在魔法方法__get__练习使用时莫名的问题

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,
不知道问题出在哪了,求助大神们{:10_266:}

isdkz 发表于 2022-1-27 22:11:59

没问题吧

Twilight6 发表于 2022-2-6 11:45:01


你使用的应该是 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'
页: [1]
查看完整版本: 在魔法方法__get__练习使用时莫名的问题