Как правильно вызвать функцию в этом классе? - PullRequest
1 голос
/ 23 октября 2019

Мой вопрос заключается в том, как правильно вызвать функцию printDistance в моем классе City, введя два названия городов, доступных в CSV, в котором я читаю. Я собираюсь использовать значения, связанные с этими двумя городами, для выполнения уравнения.

Но когда я ввожу для тестирования два города (Париж и Токио), я получаю "NameError: name 'Paris' is not defined." Я пытаюсь, чтобы self и othercity были в состоянии идентифицировать город, который я ввожу.

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
        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."

    @classmethod 
    def printDistance(self, othercity):     
        lat_self = self.lat
        lat_othercity = othercity.lat
        lon_self = self.lon
        lon_othercity = othercity.lon

Cities = []

f = open("CityPop.csv","r")
header = f.readline()
header = header.strip().split(",")
for line in f:
    record = line.strip().split(",")
    pop = {}
    for i in range (5, 14):
        pop[header[i]] = record[i]
    newCity = City(name = record[3], label = record[4], lat = record[1], lon = record[2], pop_dict = pop)
    Cities.append(newCity)


print City.printDistance(Paris, Tokyo) #example
...