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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值