内置的Attr系列

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

posted @ 2017-04-24 19:06  Great_kyle  阅读(135)  评论(0编辑  收藏  举报