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
  • 相关阅读:
    redis的事务不是原子性
    Jenkins持续集成 入门实践
    Docker入门实践
    程序员该有的职业素养
    ubuntu sudoers配置错误
    日志分析工具 Log Parser
    压力测试记录
    Winscp使用sudo user登录
    Linux下通过NFS共享文件夹
    Jexus 5.4.6 on CentOS 6.6
  • 原文地址:https://www.cnblogs.com/vincenshen/p/7107522.html
Copyright © 2011-2022 走看看