第46讲__delete__的一些小疑惑
为什么del test.x 后还能访问test.x呢,难道__delete__只是试图删除时执行一下这个方法,
并不是实际删除对象么
试了一下del Test.x好像才算删除成功
有大佬解答一下么{:10_245:}
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
因为你重写了 MyDes 类的 __delete__ 魔法方法,且方法中并没有写如何删除 x 变量
重写的 __delete__ 方法只起到了 print 打印的功能,所以此时你对 MyDes 类 调用 del 时,就会导致无法删除变量
但你的 Test 类并没有重写 __delete__ 魔法方法, Test 类默认继承 object 类,此时你调用 del Test.x 时候是调用 基类的 __delect__,而不是你重写的 __delete__
因为你已经把delete重写了,这表明着它已经没有以前那个删除的功能了{:10_256:}。你可以选择继承一下原来的方法,就可以删除数据了{:10_256:} 谢谢{:10_254:}
页:
[1]