Python中Restaurant超类的IceCreamStand子类属性缺失错误如何解决?
问题分析
你遇到的AttributeError提示子类实例没有flavor属性,大概率是子类__init__方法中self.flavor的缩进错误,导致这行代码未被正确执行(比如缩进嵌套到super().__init__的调用逻辑内,或缩进层级不匹配)。从你贴出的代码来看语法逻辑是正确的,但实际运行的代码可能存在缩进问题。
修正后的代码
class Restaurant: def __init__(self, name, cuisine_type): """Initialize attributes to describe restaurant.""" self.name = name self.cuisine_type = cuisine_type self.number_served = 23 def describe_restaurant(self): print(f"The restaurant name is {self.name}.") print(f"This restaurant is a {self.cuisine_type} restaurant.") def open_restaurant(self): print(f"{self.name} is now open.") def set_number_served(self, new_number_served): self.number_served = new_number_served def increment_number_served(self, increment): self.number_served += increment class IceCreamStand(Restaurant): def __init__(self, name, cuisine_type): # 正确调用父类初始化方法,继承父类属性 super().__init__(name, cuisine_type) # 确保该行与super()处于同一缩进层级,成为实例属性 self.flavor = "Vanilla" def display_flavors(self): print("The flavor they offer:") print(self.flavor) # 实例化子类并调用方法 creamStand = IceCreamStand("Jace's Ice Cream", "Ice cream") creamStand.describe_restaurant() creamStand.display_flavors()
关键注意点
- 缩进一致性:Python对缩进极度敏感,子类
__init__中的self.flavor必须和super().__init__处于同一缩进层级,确保实例初始化时这行代码被执行,将flavor绑定为实例属性。 - 父类初始化顺序:
super().__init__(name, cuisine_type)必须先调用,完成父类属性的初始化后,再定义子类的自定义属性,避免实例化异常。
运行修正后的代码会输出预期结果:
The restaurant name is Jace's Ice Cream. This restaurant is a Ice cream restaurant. The flavor they offer: Vanilla
内容的提问来源于stack exchange,提问作者Jace
相关产品推荐
相关产品推荐

