自定义属性(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)

 

posted @ 2018-06-28 09:13  duxiao123  阅读(1621)  评论(0编辑  收藏  举报