反射¶
作者: | 王蒙 |
---|---|
标签: | 反射 |
简介: | 常用的反射相关的函数。 |
解决办法¶
__getattribute__ 和 __getattr__
访问对象的属性(a.x 或者 getattr(a, ‘x’))一定会调用 __getattribute__ 方法。
__getattribute__ 默认(如果没有自定义的话)会按照 data-descriptor, dict attribute, non-data-descriptor 的顺序寻找属性值,如果没有找到会调用 __getattr__ 返回属性值。
__getattr__ 默认是抛出 AttributeError 异常。不过时不时可以重定义 __getattr__ 方法(几乎不会自定义 __getattribute__ 方法)。
hasattr
getattr
setattr
isintance
dir
inspect 包:这是 python 反射用的包,用的不多,就算 github 上有名的类库用的也不多。
参考文献¶
- Difference between __getattr__ vs __getattribute__: https://stackoverflow.com/questions/3278077/difference-between-getattr-vs-getattribute
- inspect 文档: https://docs.python.org/3/library/inspect.html