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

Python OOP中如何访问Menu类内指定饮品的cost属性?

解决Python OOP中Menu类饮品cost属性访问错误的问题

核心问题分析

你当前的写法menu[order][cost]存在两处错误:

  1. Menu类实例(比如你代码里的menu)不是字典/序列的直接访问结构,默认无法通过[order]这种方式获取对应的MenuItem实例;
  2. 即使拿到了MenuItem实例,[cost]是字典的键访问语法,而类实例的属性必须用**点号.**来调用。

正确实现步骤

假设你的Menu和MenuItem类基础结构如下(常见的饮品售卖类结构):

class MenuItem:
    def __init__(self, name, cost, ingredients):
        self.name = name
        self.cost = cost
        self.ingredients = ingredients

class Menu:
    def __init__(self):
        self.items = [
            MenuItem("latte", 2.5, {"espresso": 1, "milk": 2}),
            MenuItem("espresso", 1.5, {"espresso": 1}),
            MenuItem("cappuccino", 3.0, {"espresso": 1, "milk": 1})
        ]
    
    # 给Menu类加一个根据名称查找饮品的方法
    def get_drink(self, order_name):
        for item in self.items:
            if item.name == order_name.lower():
                return item
        return None

1. 获取目标MenuItem实例

用户选择饮品后,先通过Menu类的查找方法拿到对应的实例:

# 假设order是用户输入的饮品名称字符串,比如"latte"
target_drink = menu.get_drink(order)

2. 正确访问cost属性并传入支付方法

拿到实例后,用点号访问cost属性,再传入make_payment:

if target_drink:
    mymoney.make_payment(target_drink.cost)
else:
    print("菜单中没有该饮品")

替代方案(无查找方法时)

如果你的Menu类没有专门的查找方法,也可以直接遍历内部的菜单列表:

target_drink = None
for item in menu.items:  # 注意这里是Menu实例的items列表属性
    if item.name == order.lower():
        target_drink = item
        break

if target_drink:
    mymoney.make_payment(target_drink.cost)

内容的提问来源于stack exchange,提问作者Abdou Bonfoh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:55:14