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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:25:20