|
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]
因为你重写了 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__
|