这是基于shapely package的问题,但我认为这是一个更普遍的问题。Python子类失去子类属性
基本上我有两个类来自匀称。一个叫做Point
,另一个叫MultiPoint
。您使用坐标元组实例化Point
,使用Point
列表MultiPoint
。您可以使用索引访问多点中的点。
p1 = Point((1,1))
p2 = Point((2,2))
mp = MultiPoint([p1,p2])
In [315]: MultiPoint((p1, p2))[0]
Out[315]: <shapely.geometry.point.Point at 0x1049b1f50>
我想要子类Point
并将其用于汽车的位置。现在
class Car(Point):
def __init__(self, coords, speed):
super(self.__class__, self).__init__(coords)
self.speed = speed
我可以写
c1 = Car((1,1), speed=2)
c2 = Car((2,2), speed=3)
mc = MultiPoint([c1,c2])
我可以使用索引访问的汽车,但他们不再是汽车。他们是点。特别是他们没有属性速度。
In [316]: MultiPoint((c1, c2))[0]
Out[316]: <shapely.geometry.point.Point at 0x1049b1610>
In [317]: MultiPoint((c1, c2))[0].speed
AttributeError: 'Point' object has no attribute 'speed'
有没有一种方法通过子类化多点?我想我不知道汽车(点)在传递给MultiPoint时会发生什么。
编辑:我输入c1
和c2
的代码示例时输入错误。现在已经修复了。我没有实例化点,我正在实例化汽车。
你的“现在我可以写”的例子应该是调用'Car'而不是'Point'吗?如果是这样,我怀疑这个问题的答案完全取决于MultiPoint是如何实现的。如果它只包含传入它的对象,则应该能够使其工作。但是,如果它将通过'Point'实例的坐标解包并将它们放入其他类型的数据结构(可能是C数组)中,那么您可能不太顺利。 – Blckknght
@Blckknght。感谢您指出我的错误。它是固定的。我有点怀疑我可能不走运。我想我正在寻找指导组织原则。 – Ben