我专注于django.contrib.gis.geos.Point
只是为了更好地创建和处理明确纬度和经度的点。
我目前的代码:
from django.contrib.gis.geos import Point
class LLPoint(Point):
def __init__(self, *args, **kwargs):
lat = kwargs.get('latitude')
lng = kwargs.get('longitude')
if lat and lng:
super(LLPoint, self).__init__(lng, lat)
elif lat or lng:
raise TypeError(u'You must both declare latitude and longitude, '
'not just one of them.')
else:
super(LLPoint, self).__init__(*args, **kwargs)
def __unicode__(self):
c = self.coordinates()
return u'LLPoint Lat: %.5f Lng: %.5f' % (c['latitude'], c['longitude'])
def coordinates(self):
return {
'latitude': self.coords[1],
'longitude': self.coords[0]
}
问题是:
>>> LLPoint(latitude=10.0, longitude=20.0)
<Point object at 0xdeadbeef>
为什么它会返回Point
个对象?这样我就不能使用我在子类中声明的任何东西。如果我尝试重现存根类的问题,它的工作原理。这可能是非常愚蠢的,但我看不到。
答案 0 :(得分:6)
super(Point, self).__init__(point, srid=srid)
self._post_init(srid)
执行
self.__class__ = GEOS_CLASSES[self.geom_typeid]
将self
的类更改为Point
。恶
你可以尝试:
class LLPoint(Point):
def __init__(self, *args, **kwargs):
...
super(LLPoint, self).__init__(lng, lat) # this changes self.__class__ to Point
...
self.__class__ = LLPoint