Python运行代码报AttributeError: 'Car'对象无'manufacturer'属性问题排查
错误原因
- 核心触发原因:你在
get_descriptive_name方法中调用了不存在的实例属性self.manufacturer。类初始化方法__init__中仅定义了make、model、year三个实例属性,你传入的品牌参数'audi'被赋值给了self.make,和你调用的属性名不匹配。 - 潜在隐藏问题:你贴出的代码中构造方法被错误标注(缺少前后双下划线、被HTML标签污染),如果你的本地代码也没有写对
__init__前后的双下划线,会导致初始化逻辑完全不生效,就算属性名对了也会报错。
修复方案
二选一执行即可,核心是保证属性名在初始化和调用处前后统一:
方案1:修改方法内调用的属性名,和初始化逻辑保持一致
把get_descriptive_name里的self.manufacturer改成self.make,修正后完整代码如下:
class Car: def __init__(self, make, model, year): self.make = make self.model = model self.year = year def get_descriptive_name(self): # Return a neatly formatted descriptive name. long_name = f"{self.year} {self.make} {self.model}" return long_name.title() my_new_car = Car('audi', 'a4', 2019) print(my_new_car.get_descriptive_name())
运行后输出结果为:2019 Audi A4
方案2:修改初始化逻辑的属性名,和方法调用保持一致
把初始化里的self.make改成self.manufacturer,同时对应调整构造方法参数名,修正后代码如下:
class Car: def __init__(self, manufacturer, model, year): self.manufacturer = manufacturer self.model = model self.year = year def get_descriptive_name(self): # Return a neatly formatted descriptive name. long_name = f"{self.year} {self.manufacturer} {self.model}" return long_name.title() my_new_car = Car('audi', 'a4', 2019) print(my_new_car.get_descriptive_name())
内容的提问来源于stack exchange,提问作者big O
相关产品推荐
相关产品推荐

