Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中对属性应用“map”_Python_Object_Dictionary_Properties - Fatal编程技术网

在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)