鱼C论坛

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

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

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



  1. class MyDes:
  2.     def __init__(self, initval=None, name=None):
  3.         self.val = initval
  4.         self.name = name

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

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

  11.     def __delete__(self, instance):
  12.         print("正在删除变量:", self.name)
  13.         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__
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

但你的 Test 类并没有重写 __delete__ 魔法方法, Test 类默认继承 object 类,此时你调用 del Test.x 时候是调用 基类的 __delect__,而不是你重写的 __delete__
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2021-5-25 23:15:07 From FishC Mobile | 显示全部楼层
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 09:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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