自定义属性(custom Attributes)
Python中可以赋予一个对象自定义的属性 就是类定义中不存在的属性
对象通过特殊属性__dict__存储自定义属性
class C1:
pass
o=C1()
o.name="custom name"
o.name
o.__dict__
通过重载__getattr__ 和__setattr__ 可以拦截对成员的访问
从而自定义属性的行为
__getattr__只有在访问不存在的成员时才会调用
__getattribute__拦截所有(包括不存在的成员)的获取操作
__getattribute__中不要使用 return self.__dict__[name] 来返回结果
在访问 self.___dict__时 同样会被__getattribute__拦截 从而造成无线递归形成死循环
__getattr___(self,name) 获取属性比 __getattribute__优先调用
__getattribute__(self,name)获取属性
__setattr__(self,name,value)设置属性
__delattr__(self,name)删除属性
-----
自定义属性示例
class CustomAttribute(object):
def __init__(self):
pass
def __getarribute__(self,name):
return str.upper(object.__getattribute__(self,name))
def __setattr__(self,name,value):
object.__setattr__(self,name,str.strip(value))
if __name__=="__main__":
o=CustomAttribute()
o.f="mary"
print(o.f)