python __getattr__和__setattr__

__getattr__:当使用点号获取实例属性时,如果属性不存在就自动调用__getattr__方法。
__setattr__:当设置类实例属性时自动调用,如j.name=5 就会调用__setattr__方法 。
self.[name]=5因为这个类是从dict继承来的,是dict的子类所以 self[attr]=value 相当于调用dict的下标方法与 a={} ; a[attr]=value意思一样。

案例:

class Dict(dict):

    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError:
            raise AttributeError(r"'Dict' object has no attribute '%s'" % key)

    def __setattr__(self, key, value):
        self[key] = value

d = Dict(a=1, b=2)
print (d['a'])
print (d.a) #调用类中原本没有定义的属性时候,调用__getattr__
d.a = 100 #对实例的属性进行赋值的时候调用__setattr__
print (d['a'])

运行结果:

1
1
100

你可能感兴趣的:(Python编程)