Python 类的__getattr__ __setattr__ __getitem__ __setitem__

__getattr__ :

  如果某个类定义了__getattr__方法,同时系统在该类对象的实例字典中又找不到待查询的属性时,系统会自动调用__getattr__方法。

 

__getattribute__ :

  程序每次访问对象的属性时,Python系统都会调用这个特殊的方法,即使属性字典里面已经有了该属性,也依然会触发__getattribute__方法。

 

__setattr__ :

  设置类实例属性 如obj.key = 'tom',自调用__setattr__

 

__getitem__:

   使用[]获取实例属性 如obj[key],自调用__getitem__; obj[key]的背后就是__getitem__方法,为了能求得obj[key]的值,解释器实际上会调用obj.__getitem__(key).

 

__setitem__:

  使用[]设置实例属性如 obj['key'] = 'tom' ,自调用__setitem__

 

示例:

class Student(object):
    
    def __getattr__(self, item):
        return item + " is not exists"

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

    def __getitem__(self, item):
        return self.__dict__[item]

    def __setitem__(self, key, value):
        self.__dict__[key] = value


if __name__ == '__main__':
    stu = Student()
    print(stu.name)  # 调用__getattr__方法

    stu.age = 22  # 调用__set__attr方法
    print(stu["age"])  # 调用__getitem__方法

    stu["name"] = "tom"  # 调用__setitem__方法
    print(stu["name"])  # 调用__getitem__方法

# >>执行结果
# name is not exists
# 22
# tom
posted @ 2017-07-02 22:23  Vincen_shen  阅读(1126)  评论(0)    收藏  举报