You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类属性访问错误求助:城市类代码问题排查

解决你的Python类属性访问错误与代码优化建议

首先,咱们先搞定你遇到的TypeError: type object 'City' has no attribute 'name'错误——这问题出在代码最后一行的print(City.name)上。这里的City是你定义的类本身,而name是你在__init__里给类的实例设置的属性,类本身并没有这个属性,所以直接访问肯定会报错。你应该访问的是某个具体的实例(比如Toronto.name),或者在你的比较函数里正确输出匹配到的实例属性。

接下来咱们梳理下代码里的其他问题,顺便优化一下:

1. 修复city_Compare函数的逻辑问题

你的当前函数在循环时,只要第一个城市不匹配就会立刻打印提示并返回,这样后面的城市根本没机会被检查。比如用户输入"Montreal",第一个循环到Toronto不匹配,直接就输出提示了,根本不会检查Montreal。

2. 修正后的完整代码

class City:
    def __init__(self, name, country, re_growth10):
        self.name = name  # 城市名称
        self.country = country  # 所属国家
        self.re_growth10 = re_growth10  # 过去10年房价增长率

    def city_Info(self):
        return f"{self.name}, {self.country}, 近10年房价增长率: {self.re_growth10}"

# 创建城市实例
toronto = City("Toronto", "Canada", 0.03)
montreal = City("Montreal", "Canada", 0.015)

user_city_name = input("你想在哪个城市买房?").strip()  # 去掉输入前后的空格,避免匹配问题

def city_compare(user_city_name):
    cities = [toronto, montreal]
    matched_city = None
    # 遍历所有城市找匹配项
    for city in cities:
        if city.name.lower() == user_city_name.lower():  # 不区分大小写匹配,更友好
            matched_city = city
            break
    if matched_city:
        print(f"找到匹配城市信息:{matched_city.city_Info()}")
    else:
        print("我们没有这个城市的信息哦")

# 调用比较函数
city_compare(user_city_name)

关键改进点说明

  • 类与实例的区分:明确City是类,toronto、montreal是类的实例,只有实例才有name、country这些属性,类本身没有。
  • 循环逻辑优化:先遍历所有城市找到匹配项,再统一处理结果,避免提前终止循环。
  • 不区分大小写匹配:用lower()方法让输入更灵活,比如用户输入"toronto"也能匹配到。
  • 代码风格规范:变量名用小写加下划线(PEP8规范),比如user_city_name而不是user_CityName,可读性更好。
  • 利用类方法city_Info:直接调用实例的方法输出完整信息,比单独打印属性更简洁。

类属性与实例属性的小科普

  • 实例属性:就是你在__init__里用self.xxx定义的属性,每个实例(比如toronto、montreal)都有自己独立的这些属性值。
  • 类属性:如果想让所有实例共享某个属性,可以直接在类里定义,比如:
    class City:
        planet = "Earth"  # 类属性,所有城市实例共享
        def __init__(self, name, country, re_growth10):
            self.name = name
            # ... 其他属性
    
    访问类属性可以用City.planet或者toronto.planet,两者都能拿到值。

内容的提问来源于stack exchange,提问作者Saad Shahid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:53:13