Attr包含三个函数
getattr, setattr, delattr
setattr:添加/修改属性会触发它的执行
delattr:删除属性的时候会触发
getattr:只有在使用点属性且属性不存在的时候才会触发
class Student:
def __init__(self,name,age,classroom):
self.name =name
self.age=age
self.classroom =classroom
def __getattr__(self, item):
print("我没找到这个属性%s"%item)
def __setattr__(self, key, value):
print("我需要为变量%s设置这个值%s,但是利用的是__dict__字典"%(key,value))
self.__dict__[key]=value
def __delattr__(self, item):
print("我需要删除这个属性拉%s,利用的也是self__dict__字典"%item)
self.__dict__.pop(item,"找到这个属性,没法删除拉")
s1 = Student("Grace",20,102) #实例化对象,
print(s1.age) #调用age属性
print(s1.ge) #调用ge属性
s1.num = 87 #新增一个num属性冰赋值为87
print(s1.num) #调用s1.num,查看结果
del s1.num #删除s1的num属性
print(s1.num) #查看调用s1的num属性
执行结果
我需要为变量name设置这个值Grace,但是利用的是__dict__字典
我需要为变量age设置这个值20,但是利用的是__dict__字典
我需要为变量classroom设置这个值102,但是利用的是__dict__字典
20
我没找到这个属性ge
None
我需要为变量num设置这个值87,但是利用的是__dict__字典
87
我需要删除这个属性拉num,利用的也是self__dict__字典
我没找到这个属性num
None