python 内置方法:__getattr__和__setattr__

在python中,有时候会遇到内置方法:__getattr__、  __setattr__和__delattr__方法。

 1 class Conf:
 2 
 3     def __getattr__(self, item):
 4         return item
 5     def __setattr__(self, key, value):
 6         self.__dict__[key]=value
 7     def __delattr__(self, item):
 8         self.__dict__.pop(item,None)
 9 conf=Conf()
10 
11 print(conf.evil)
12 conf.tom=22
13 print(conf.tom)
14 del conf.tom
15 print(conf.tom)

 

 当我们通过访问一个对象的点.属性的时候,是通过__dict__里寻找,如果__dic__里没有的话,会找该对象的类方法中,是否有内置方法__getattr__。如果有,会将上面的conf.evil中的evil当做变量传入到方法

__setatrr__中,即赋值上例子中的item,关于__setattr__是通过给对象.xx=yy的形式的 将 xx、yy当做变量传入上例子中__setattr__并设置,当我们操作del  对象.xx的时候,会自动将xx 当做实参传入到

Conf的__delattr__方法。

如上的__setattr__ 、__getattr__、__delattr__方法和内置方法:__setitem__、__getitem__和__delitem__方法一样,唯一区别是:前者是用点.来操作而后者是用[]字典的形式来进行的。

 

posted @ 2016-12-28 16:29  evil_liu  阅读(254)  评论(0)    收藏  举报