這是基於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