python中__getattr__和__setattr__

代码:

点击查看代码
#!/usr/bin/env python
#! -*- coding:utf-8 -*-
 
 
class A(object):
 
    def __setattr__(self, key, value):
        self.__dict__[key] = value
 
    def __getattr__(self, name):
        return "xxx"
 
obj = A()
执行操作的代码:

代码1:
print(obj.__dict__)
结果:
{} # 空字典
代码2:
print(obj.name)
结果:
xxx
代码3:

点击查看代码
obj.name = 'BBB'
print(obj.__dict__)
print(obj.name)
print(obj.xxx)
结果:
点击查看代码
{'name': 'BBB'}
BBB
xxx

总结:

1、当我们第一次获取obj.__dict__的结果是为空的字典。

2、当我们获取对象的某个属性的时候,会先在整个类中找,如过没有则去__getattr__方法里面找,并返回__getattr__中的属性。

3、当我们操作代码obj.name=’BBB’后,此时在类中会自动调用__setattr__方法;所以此时我们再打印obj.__dict__的时候结果会出现我们设置的属性名和属性对应的值组成的字典。

posted @ 2024-06-20 11:45  阳光天气  阅读(47)  评论(0)    收藏  举报