geopy TypeError: geocode() отсутствует 1 обязательный позиционный аргумент: 'запрос'

Извините, если это слишком простой вопрос, однако я не могу понять простую ошибку, которую выдает мне Geopy.

In [78]: import geopy

In [79]: geopy.geocoders.Nominatim.geocode("Mumbai")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-79-2465009b9d72> in <module>()
----> 1 geopy.geocoders.Nominatim.geocode("Mumbai")

TypeError: geocode() missing 1 required positional argument: 'query'

Однако следующие работы, и я не понимаю, чем отличаются эти два подхода:

In [83]: from geopy.geocoders import Nominatim

In [84]: geolocator = Nominatim()

In [85]: geolocator.geocode("Mumbai")
Out[85]: Location(Mumbai, Greater Bombay, Maharashtra, India, (18.9321862, 72.8308337, 0.0))

Насколько я могу видеть, оба кажутся эквивалентными. Что мне не хватает?


person Peaceful    schedule 25.12.2016    source источник


Ответы (1)


Проблема в том, что в первом случае вы не создаете экземпляр класса Nominatum и не пытаетесь вызвать geocode()метод экземпляра с одним аргументом. Поскольку экземпляра нет, Mumbai используется в качестве значения позиционного аргумента self, оставляя требуемый аргумент query неуказанным - отсюда и ошибка.

Оба варианта были бы эквивалентны, если бы geocode() был «методом класса», а не «методом экземпляра» (ссылка).

person alecxe    schedule 25.12.2016