Я определяю функцию для класса, который получает свои значения из файла CSV, который я прочитал. По сути, функция находит расстояние между двумя городами на основе соответствующих значений широты и долготы в записи этого города.
class City:
def __init__ (self, name, label, lat, lon, pop_dict):
self.name = name
self.label = label
self.lat = lat
self.lon = lon
self.pop_dict = pop_dict
def printDistance(self, othercity):
lat_self = self.lat
lat_othercity = othercity.lat
lon_self = self.lon
lon_othercity = othercity.lon
lat1 = float(lat_self)
lat2 = float(lat_othercity)
lon1 = float(lon_self)
lon2 = float(lon_othercity)
radian_lat1 = math.radians(lat1)
radian_lat2 = math.radians(lat2)
radian_lon1 = math.radians(lon1)
radian_lon2 = math.radians(lon2)
AD = (math.acos(math.sin(radian_lat1) * math.sin(radian_lat2) + math.cos(radian_lat1) * math.cos(radian_lat2) * math.cos(radian_lon1 - radian_lon2)))
print "The distance between", self, "and", othercity, "is", int((AD * 6300)), "kilometers."
print Cities[0].printDistance(Cities[1])
Функция работает, как и предполагалось, однако я могу только ввести индексное значение местоположения города, где он хранится, а не сами названия города. Так, для приведенного выше примера оператора print я получаю: The distance between <__main__.City instance at 0x103128d40> and <__main__.City instance at 0x1031285f0> is 5783 kilometers.
Я бы предпочел, чтобы мой оператор работал так, чтобы я мог просто выполнить: print Cities[Tokyo].printDistance(Cities[Paris])
например.