Python中Burrito类add_fries方法失效,求代码优化方案
问题分析与改进方案
你的代码存在几个关键问题导致add_fries()无法正常工作,下面是具体问题和修正方案:
核心问题点
is_california被错误定义为方法:需求要求它是布尔属性,但你写成了无返回值的方法,且方法内的变量都是局部变量,无法关联到实例。__init__默认参数使用可变对象:用[]作为默认参数会导致所有Burrito实例共享同一个contents列表,这是Python的常见陷阱。add_fries未访问实例属性:方法里直接用contents,没有通过self.contents访问实例的配料列表,会引发变量未定义错误,也无法修改实例配料。- 未初始化和更新
is_california属性:初始化时没有根据传入的contents设置该属性,添加薯条后也未同步更新。
修正后的代码
class Burrito: def __init__(self, contents=None): # 避免可变默认参数的坑,用None做默认值 self.contents = contents.copy() if contents is not None else [] # 初始化is_california属性,根据配料判断 self.is_california = 'fries' in self.contents def add_fries(self): # 访问实例的contents属性 if 'fries' not in self.contents: self.contents.append('fries') # 添加薯条后更新属性 self.is_california = True
关键改进说明
- 将
is_california改为实例属性:在__init__中根据初始配料列表直接设置布尔值,后续修改配料时同步更新。 - 修复可变默认参数问题:用
None作为默认参数,在方法内部创建新的空列表,避免多个实例共享同一列表。 - 访问实例属性时加
self:所有操作实例的contents和is_california时都通过self.xxx,确保操作的是当前实例的属性。 - 完善
add_fries方法逻辑:添加薯条后自动将is_california设为True,完全符合需求要求。
内容的提问来源于stack exchange,提问作者HELLOWORLD
相关产品推荐
相关产品推荐

