在python中对属性应用“map”
我想用地图标出一处房产,所以我试了一下在python中对属性应用“map”,python,object,dictionary,properties,Python,Object,Dictionary,Properties,我想用地图标出一处房产,所以我试了一下 map(lambda o: cls.prop(o), list_of_objects) 该属性在外部库中定义为: @property def prop(self): 但是,我得到一个TypeError错误 我测试了它“未映射”,并且cls.prop(一个_对象)工作得很好,应该是,它相当于一个_对象.prop 我做错了什么?我怎样才能做到这一点 (我知道列表理解[o.prop代表对象列表中的o],但我想了解并理解上面的错误所在)。在类上访问的属性返回属
map(lambda o: cls.prop(o), list_of_objects)
该属性在外部库中定义为:
@property
def prop(self):
但是,我得到一个TypeError
错误
我测试了它“未映射”,并且cls.prop(一个_对象)
工作得很好,应该是,它相当于一个_对象.prop
我做错了什么?我怎样才能做到这一点
(我知道列表理解
[o.prop代表对象列表中的o]
,但我想了解并理解上面的错误所在)。在类上访问的属性返回属性
对象本身,而不是包装函数。属性包含三个函数,getter、setter和deleter(每个函数都可以是None
):
或者,直接访问属性即可:
map(lambda o: o.prop, list_of_objects)
或使用:
使用
cls.prop.fget
或attrgetter
的优点是map()
C循环不必返回Python解释器循环来执行lambda
字节码。这在这里并不重要,因为属性getter实现仍然是Python代码。我强烈怀疑未映射访问是否有效。如果有,您就没有属性。map(lambda o:o.prop,对象列表)
我不知道我怎么看不到这一点!我觉得自己很愚蠢。将使用attrgetter
,感谢分享知识wrt。演出关于map(cls.prop.fget,对象列表)
,它保存一个import
语句,怎么样?没有lambda
expression,所以这项工作可以完全用C语言完成吗?@AlexandreHuat:是的,可以。其实这并不重要,因为getter本身仍然只是一个Python函数,因此C循环仍然必须返回到解释器求值循环中。
map(cls.prop.fget, list_of_objects)
map(lambda o: o.prop, list_of_objects)
from operator import attrgetter
map(attrgetter('prop'), list_of_objects)