简体   繁体   中英

Type Object '… ' has no attribute name '… '

I keep on getting the no attribute error in python. I want to make a class for cities to put into a program I am writing (Im trying to learn python on the side while working). I basically want to be able to put data into a class for cities and use that in another place. I guess, I would need to know how to access attributes from a class. Im probably doing a bunch wrong so any feedback would be helpful

class City:

    def __init__(self, name, country, re_growth10):
        self.name = name #name of the city
        self.country = country #country the city is in
        self.re_growth10 = re_growth10 #City Real estate price growth over the last 10 years

    def city_Info(self):
        return '{}, {}, {}'.format(self.name, self.country, self.re_growth10)


Toronto = City("Toronto", "Canada", 0.03) #Instance of CITY
Montreal = City("Montreal", "Canada", 0.015) #Instance of CITY

user_CityName = str(input("What City do you want to buy a house in?")) #user input for city


def city_Compare(user_CityName): #Compare user input to instances of the class
    cities = [Toronto, Montreal]
    for City in cities:
        if City.name == user_CityName:
            print(City.name)
        else:
            print("We Don't have information for this city")
        return ""


print(City.name)

You are getting confused because you have a variable that has the same name as your class, City . To avoid this, use lower-case names for variables. Once you change this, you get a different error:

NameError: name 'city' is not defined

The reason is that you are trying to print the name of a variable which is defined inside a function , but the print statement is outside the function. To fix this, put your last print statement inside the function city_Compare , and call that function (which you never do).

Or change the function to return an object instead of printing it:

def find_city(name):
    cities = [Toronto, Montreal]
    for city in cities:
        if city.name == name:
            return city
    return None

city_name = input("What City do you want to buy a house in?")
city = find_city(city_name)

if city is not None:
    print(city.name)
else:
    print("We Don't have information for this city")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM