Python动态字段查找的区别
这两段代码有什么区别(如果有的话)
model.__dict__['title_en']
和
model.__getattribute__('title_en')
哪种写法更好呢?
3 个回答
1
第一个方法不行,因为 __dict__
应该是一个字典,而不是一个函数。正确的方法是用 getattr(model, 'title_en')
。
5
正如其他人所说,getattr 是获取属性的正确方法(一般来说,你不直接访问 Python 的特殊方法,而是通过内置函数和运算符来访问它们!)。
getattr
的功能远不止于在对象的 __dict__
中查找:它支持属性和其他描述符,还能处理从类及其基类继承的属性(比如方法),以及可能通过 __getattr__
方法动态生成的属性(这个方法可以在对象的类中,或者它的基类中找到)。就像你在写代码时已经知道属性名称时直接访问 model.title_en
一样(在这种情况下当然就不需要用 getattr
了;-)。这使得 getattr 成为访问那些你只能动态“学习”到名称的属性的最佳方式!