码迷,mamicode.com
首页 > 其他好文 > 详细

__getattr__ 与动态属性

时间:2016-05-11 11:08:51      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

直接上代码

>>> class Test(object):
...     def __getattr__(self,attr_name):
...             setattr(self, attr_name, (default))
...             return self.attr_name
... 
>>> t=Test()
>>> t.name
(default)
>>> t.age
(default)
>>> t.name=smith
>>> t.name
smith
>>> t.age=38
>>> t.age
38

 

是不是感觉节操碎了一地?

 

原理剖析:

默认:

class_object.attr   --> 去 class_object.__dict__中寻找 attr的属性 --(没找着)---> class.__dict__ ----(没找者) ----> parent_class.__dict__---(没找着)----> 抛出异常 AttrbiuteError

当class定义了自己的__getattr__(而不是__getattribute__, 慎重写)时,寻找逻辑是这样的:

class_object.attr   --> 去 class_object.__dict__中寻找 attr的属性 --(没找着)---> class.__dict__ ----(没找者) ----> 调用class的__getattr__来动态“生成”属性(返回对应属性的值,没有return则为None)

 

转载请注明来源:http://www.cnblogs.com/Tommy-Yu/p/5480975.html

参考:http://m.jb51.net/article/59908.htm

谢谢!

__getattr__ 与动态属性

标签:

原文地址:http://www.cnblogs.com/Tommy-Yu/p/5480975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!