Python动态字段查找的区别

1 投票
3 回答
1309 浏览
提问于 2025-04-15 20:19

这两段代码有什么区别(如果有的话)

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 成为访问那些你只能动态“学习”到名称的属性的最佳方式!

5

最佳做法是使用 getattr

getattr(model, 'title_en')

你只有在想要 __getattr____getattribute__ 时,才需要使用它们,这时候你是想要 自定义 默认的属性获取方式。

撰写回答