zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    脑机接口不断迎来重大突破,“思想钢印”还会远吗?
    ICLR 2020 | 神经网络架构搜索(NAS)论文推荐
    人工智能理解常识的数十年挑战,如何让 AI 不再“智障”?
    You Are All Excellent 排序
    sort
    sort
    绝对值排序
    绝对值排序
    排序
    排序
  • 原文地址:https://www.cnblogs.com/vincenshen/p/7107522.html
Copyright © 2011-2022 走看看