__getattr__ 与动态属性
2016-05-11 10:14
260 查看
直接上代码
是不是感觉节操碎了一地?
原理剖析:
默认:
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
谢谢!
>>> 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
谢谢!
相关文章推荐
- HDU3791二叉搜索树(二叉树)
- 如何修改织梦后台左边导航栏目
- CentOS 7 yum方式配置LAMP环境
- Dependency Walker使用说明
- ASP.NET存储过程实现分页效果(三层架构)
- 12c OCP题库解析060-2 对配置了VPD策略的表进行在线重定义
- svn文件被锁住
- 字符串的最小窗口问题
- Butter Knife
- Android Studio运行时gradle错误
- Linux进程间通信——管道
- ios添加图片资源报(ImageAsset)错和警告
- jQuery学习和知识点总结归纳
- 随机打乱一个数组,无重复的获取一定范围内的随机数
- iOS获取UUID,并使用keychain存储
- js中基本操作
- centos常用命令
- css定义超级链接a标签里面的title的样式
- Python 代码风格 和 PEP8
- php pdo 连接MySQL数据库