python getattr_python __getattr__
这是python里的一个内建函数,当调用的属性或者方法不存在时,该方法会被调用
调用不存在的属性
class Student(object):
def __getattr__(self, attr):
if attr in ('name', 'age', 'score'):
print attr
else:
raise AttributeError('Unkonw attribute : %s' % attr)
In [8]: student = Student()
In [9]: student.name
name
In [10]: student.age
age
In [11]: student.call
AttributeError: Unkonw attribute : call
调用不存在的方法
class Student(object):
def __getattr__(self, attr):
def _func(*arg, **kwargs):
print arg, kwarg
if not attr.startswith('_'):
_func.func_name = attr
return _func
raise AttributeError('Unkonw attribute : %s' % attr)
In [22]: student = Student()
In [23]: student.name
Out[23]:
In [24]: student.name('a', 'b', c=1, d=2)
('a', 'b') {'c': 1, 'd': 2}
In [25]: student._age('a', 'b', c=1, d=2)
AttributeError: Unkonw attribute : _age
例一: 访问属性一样访问dict中的键值对
class Dict(dict):
def __init__(self, *args, **kwargs):
super(Dict, self).__init__(*args, **kwargs)
def __getattr__(self, name):
value = self[name]
if isinstance(value, dict):
value = Dict(value)
return value
In [27]: obj = Dict(student={'age': 18}, name='ZhangSan')
In [28]: obj
Out[28]: {'name': 'ZhangSan', 'student': {'age': 18}}
In [29]: obj.name
Out[29]: 'ZhangSan'
In [30]: obj.student
Out[30]: {'age': 18}
In [31]: obj.student.age
Out[31]: 18
python getattr_python __getattr__相关推荐
- python getattr_python __getattr__ 巧妙应用
在之前的文章有提到__getattr__函数的作用: 如果属性查找(attribute lookup)在实例以及对应的类中(通过__dict__)失败, 那么会调用到类的__getattr__函数, ...
- python __setattr__ , __getattr__
Python Class 对象或类型通过内置成员 __dict__ 来存储成员信息. 我们还可以通过重载 __getattr__ 和 __setattr__ 来拦截对成员的访问,需要注意的是 __ge ...
- python getattr_Python中的getattr()函数详解
最近看Dive into python第四章自省中提到getattr()函数,作为一个内建函数平时自己没怎么用过所以也不太理解这个函数的一些用法 看了下函数本身的doc getattr(object, ...
- Python的__getattr__方法学习
__getattr__函数的作用: 如果属性查找(attribute lookup)在实例以及对应的类中(通过__dict__)失败, 那么会调用到类的__getattr__函数: 如果没有定义这个函 ...
- python getattr_python getattr的美妙生活
一.简介 1.getattr是Python的内置函数 2.用法getattr(object,"attribution",None) object: 对象 attribution:实 ...
- 『Python』__getattr__()特殊方法
self的认识 & __getattr__()特殊方法 将字典调用方式改为通过属性查询的一个小class, class Dict(dict):def __init__(self, **kw): ...
- python getattr_Python 内置方法和属性应用:反射和单例
1. 前言 python除了丰富的第三方库外,本身也提供了一些内在的方法和底层的一些属性,大家比较常用的如dict.list.set.min.max.range.sorted等.笔者最近在做项目框架时 ...
- python getattr_Python中的getattr()函数详解:
标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...
- [转载] python getattr_Python中的异常处理
参考链接: Python getattr() 后台回复1024,解锁无限快乐! 异常处理在任何一门编程语言里都是值得关注的一个话题,良好的异常处理可以让你的程序更加健壮,清晰的错误信息更能帮助你快速修 ...
最新文章
- SCVMM 2008 R2 SP1 快速修改动态内存
- 关于php无字母代码的研究
- 使用 Azure PowerShell 管理 Azure 虚拟网络和 Windows 虚拟机
- 谁说双非本科就一定无缘阿里?H哥粉丝6棉通过,喜提Offer!
- 第一章数据库设计规范
- ES6异步编程: co函数库的含义与用法
- [产品设计]如何绘制业务流程图(下)
- 超大Excel文件读写 :使用SXSSFWorkbook和EasyExcel方式对比
- 儿童节,来一波回忆杀!
- sql语句转为mysql语句_sql语句转换 sqlserver 转成mysql语句。
- You are trying to add a non-nullable field 'code' to business without a default; we can't do that...
- 【在线学习站点汇总】
- 有效破解PDF文件的打开口令密码
- (附源码)ssm医护服务平台 毕业设计 260954
- bootice添加黑苹果引导_黑苹果设置从硬盘引导_在PE中写入UEFI引导启动项
- android应用APP-安全测试 drozer
- 《Thinking in Bets》读书分享(1) - 如何在信息不完全情况下做出更好的决策
- 基于multisim的fm调制解调_基于Multisim的无线调频接收机设计
- 全系列集成隔离电源的隔离器芯片
- body标签中的相关标签