鱼C论坛

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

[已解决]在魔法方法__get__练习使用时莫名的问题

[复制链接]
发表于 2022-1-27 22:08:33 | 显示全部楼层 |阅读模式

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

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

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,
不知道问题出在哪了,求助大神们
最佳答案
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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-27 22:11:59 | 显示全部楼层
没问题吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 08:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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