求问大佬们,描述符__delete__方法怎么实现删除原类属性的功能啊?
就是比如说我让A是一个描述符类,B是一个普通类。我在B中令x = A()。则此x即为B类的一个属性,现在我想在外部使用 del B实例对象.x 操作删除B类的一个实例对象的x这个属性,也就是删除x这个A类的实例对象。求问在A类中的__delete__方法中该怎么编写代码?? class Stu_descriptor:def __init__(self):
pass
def __get__(self, obj, objtype):
print("获取了age的值")
return self.age
def __set__(self, obj, age):
print("修改了age的值")
self.age = age
def __delete__(self, obj):
print("删除了age属性")
del self.age
del Stu.age
def __del__(self):
print("删除了数据描述符实例")
class Stu:
def __init__(self):
pass
age = Stu_descriptor()
print(Stu.__dict__)
stu1 = Stu()
stu2 = Stu()
stu2.age = 12
print(stu1.age)
del stu2.age
print(Stu.__dict__) kogawananari 发表于 2020-12-10 16:40
大佬,14行和15行,为啥删除self.age不会调用描述符类的__del__(self)方法,而删除Stu.age时却调用描述符类的__del__方法啊??不应该是除self.age时程序会调用描述符类的与删除相关的魔法方法,而删除Stu.age时程序会调用Stu类的与删除相关的魔法方法吗??为啥是反的?? __delete__和__del__完全不一样
__del__相当于自动垃圾回收 所有的类都有
再说你想直接触发__del__至少也得是del Stu.age
del stu2.age明显不行实例都没有age属性的
{:10_292:}
kogawananari 发表于 2020-12-10 20:52
__delete__和__del__完全不一样
__del__相当于自动垃圾回收 所有的类都有
我傻了,这几节课一直和属性打交道,弄得我以为__del__方法时属性被删除时会调用的方法,回去看了笔记才想起来原来这方法是实例对象被删除时才调用的方法。。。描述符实例对象只能是类属性,不能是实例属性,这个我也搞明白了。感谢大佬!
页:
[1]