Если у вас есть контроль над кодом GoogleV3Place (т. Е. Это код, который вы написали, а не в библиотеке), то я бы реорганизовал parse_json, чтобы получить аргумент "parse_place_fn", и переместил бы parse_place в верхнюю часть.функция уровня (если проблема с доступностью, вы всегда можете поставить префикс с двойным подчеркиванием):
def parse_place(place):
"""This returns an object how we want it returned."""
location.formatted_address = place.get('formatted_address')
location.latitude = place['geometry']['location']['lat']
location.longitude = place['geometry']['location']['lng']
latitude = place['geometry']['location']['lat']
longitude = place['geometry']['location']['lng']
return (location, (latitude, longitude))
class GoogleV3Place(GoogleV3):
"""Simply extends the GoogleV3 to bucket the object into a place"""
def parse_json(self, page, exactly_one=True, parse_place_fn = parse_place):
"""Returns location, (latitude, longitude) from json feed."""
if not isinstance(page, basestring):
page = util.decode_page(page)
self.doc = json.loads(page)
places = self.doc.get('results', [])
if not places:
check_status(self.doc.get('status'))
return None
elif exactly_one and len(places) != 1:
raise ValueError(
"Didn't find exactly one placemark! (Found %d)" % len(places))
if exactly_one:
return parse_place_fn(places[0])
else:
return [parse_place_fn(place) for place in places]
Теперь любая созданная вами функция занимает место и возвращает кортеж формы (location, (latitude,широта)) может быть передано в parse_json, и если функция не указана, используется значение по умолчанию parse_place.