Python动态字段查找之间的区别

时间:2010-03-11 22:33:42

标签: python

之间有什么区别(如果有的话)
model.__dict__['title_en']

model.__getattribute__('title_en')

什么是最佳做法?

3 个答案:

答案 0 :(得分:5)

最佳做法?使用getattr

getattr(model, 'title_en')

当您想要override默认的属性提取机制时,您只需要__getattr____getattribute__

答案 1 :(得分:5)

正如其他人所说,getattr内置是获取属性的正确方法(通常你不直接访问Python特殊方法:你通过内置函数和运算符访问它们!)。

getattr比对象__dict__中的查找做得更多:它支持属性和其他描述符,从类继承的属性及其基础(如方法),可动态的属性通过__getattr__方法生成(在对象的类中,或者,再次,它的一个基础)。就像直接访问model.title_en一样,当您在编写代码时知道名称时(在这种情况下,您当然不会使用getattr ;-)。这使得到目前为止是访问仅动态“学习”其名称的属性的首选方式!

答案 2 :(得分:1)

第一个不起作用,因为__dict__应该是字典,而不是函数。正确的方法是getattr(model, 'title_en')