鱼C论坛

 找回密码
 立即注册
查看: 2409|回复: 3

[已解决]第46讲__delete__的一些小疑惑

[复制链接]
发表于 2021-5-25 11:58:53 | 显示全部楼层 |阅读模式
5鱼币
为什么del test.x 后还能访问test.x呢,
难道__delete__只是试图删除时执行一下这个方法,
并不是实际删除对象么
试了一下del Test.x好像才算删除成功
有大佬解答一下么


class MyDes:
    def __init__(self, initval=None, name=None):
        self.val = initval
        self.name = name

    def __get__(self, instance, owner):
        print("正在获取变量:", self.name)
        return self.val

    def __set__(self, instance, value):
        print("正在修改变量:", self.name)
        self.val = value

    def __delete__(self, instance):
        print("正在删除变量:", self.name)
        print("噢~这个变量没法删除~")

>>> class Test:
        x = MyDes(10, 'x')

>>> test = Test()
>>> y = test.x
正在获取变量: x
>>> y
10
>>> test.x = 8
正在修改变量: x
>>> del test.x
正在删除变量: x
噢~这个变量没法删除~
>>> test.x
正在获取变量: x
8[/code]
最佳答案
2021-5-25 11:58:54

因为你重写了 MyDes 类的 __delete__ 魔法方法,且方法中并没有写如何删除 x 变量

重写的 __delete__ 方法只起到了 print 打印的功能,所以此时你对 MyDes 类 调用 del 时,就会导致无法删除变量

但你的 Test 类并没有重写 __delete__ 魔法方法, Test 类默认继承 object 类,此时你调用 del Test.x 时候是调用 基类的 __delect__,而不是你重写的 __delete__

最佳答案

查看完整内容

因为你重写了 MyDes 类的 __delete__ 魔法方法,且方法中并没有写如何删除 x 变量 重写的 __delete__ 方法只起到了 print 打印的功能,所以此时你对 MyDes 类 调用 del 时,就会导致无法删除变量 但你的 Test 类并没有重写 __delete__ 魔法方法, Test 类默认继承 object 类,此时你调用 del Test.x 时候是调用 基类的 __delect__,而不是你重写的 __delete__
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-25 11:58:54 | 显示全部楼层    本楼为最佳答案   

因为你重写了 MyDes 类的 __delete__ 魔法方法,且方法中并没有写如何删除 x 变量

重写的 __delete__ 方法只起到了 print 打印的功能,所以此时你对 MyDes 类 调用 del 时,就会导致无法删除变量

但你的 Test 类并没有重写 __delete__ 魔法方法, Test 类默认继承 object 类,此时你调用 del Test.x 时候是调用 基类的 __delect__,而不是你重写的 __delete__
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-25 13:01:13 | 显示全部楼层
因为你已经把delete重写了,这表明着它已经没有以前那个删除的功能了。你可以选择继承一下原来的方法,就可以删除数据了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-25 23:15:07 From FishC Mobile | 显示全部楼层
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 17:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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