选择自定义对象列表中的数据成员



我定义了以下自定义类:

class Point():
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z

,我有一个Point对象的列表,叫做points。现在我需要在3D散点中绘制这些点。有没有一种快速的方法来获得所有点的x值,我可以在类定义中实现?我知道我可以用

xs = [p.x for p in points]
ys = ...

但是有点乏味。有人知道怎么把这个融入我的课堂吗?或者我需要定义一个PointList类?

感谢

可以创建PointList

class PointList(list):
def xs(self):
return [p.x for p in self]
def ys():
return [p.y for p in self]
def zs():
return [p.z for p in self]

那么你可以这样使用:

points = PointList([Point(4, 5, 6), Point(2, 6, 4)]) #constructor
print(points.xs()) # [4, 2]

由于继承自list,所以所有的标准列表方法都可以工作。

注意这些都是函数。您可以让它们在每次执行时运行,但这会增加复杂性并模糊需要完成的工作。从技术上讲,您可以存储这些列表并返回这些列表,但这会使添加/删除/更新点变得更加复杂(并且返回的列表将是可变的)。

您可以使用lambda函数,也可以将其合并为映射对象的常规函数,如以下示例:

class Point:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z

getter = lambda points, attr: [getattr(elm, attr, None) for elm in points]
ps = [Point(1, 2, 3), Point(4, 5, 6)]
xs = getter(ps, 'x')
print(xs)

输出:

[1, 4]

相关内容

最新更新