如何在OOP python中访问由函数格式化的数据

ecr0jaav  于 2022-12-17  发布在  Python
关注(0)|答案(2)|浏览(152)

我无法访问某些由Python中的OOP函数格式化的数据:

class Menu:
    """Models the Menu with drinks."""
    def __init__(self):
        self.menu = [
            MenuItem(name="latte", water=200, milk=150, coffee=24, cost=2.5),
            MenuItem(name="espresso", water=50, milk=0, coffee=18, cost=1.5),
            MenuItem(name="cappuccino", water=250, milk=50, coffee=24, cost=3),
        ]
1.  from menu import Menu
2.  from coffee_maker import CoffeeMaker
3.  from money_machine import MoneyMachine
4.  
5.  print("HOT COFFEE!")
6.  print("Here is the coffee menu!")
7.  menu1 = Menu()
8.  mycoffee = CoffeeMaker()
9.  print("Here are the resources available to make coffee!")
10. mycoffee.report()
11. order = input("Choose the type of coffee you want: ")
12. menu1.find_drink(order)
13. mymoney = MoneyMachine()
14. mymoney.process_coins()
15. mymoney.make_payment(**menu[order][cost]**)
16. if mymoney.make_payment() == True:
17.   if mycoffee.is_resource_sufficient(order) == True:
18.     mycoffee.make_coffee()

第15行的粗体字让我很头疼,我不知道如何访问Menu类中的cost
我试过了:mymoney.make_payment(menu[order][cost])

lsmepo6l

lsmepo6l1#

我建议在www.example.com中使用dictionary object而不是list对象Menu.menu。
老实说,我不确定我是否理解了这个问题(也许可以重新表述你的问题,或者分享更多的代码),但是假设MenuItem也是一个类,那么下面的代码可以用来访问开销:

class Menu:
"""Models the Menu with drinks."""
def __init__(self):
    self.menu = {
        "latte": MenuItem(name="latte", water=200, milk=150, coffee=24, cost=2.5),
        "espresso": MenuItem(name="espresso", water=50, milk=0, coffee=18, cost=1.5),
        "cappucino": MenuItem(name="cappuccino", water=250, milk=50, coffee=24, cost=3),
    }

这样,您应该能够使用Menu.menu[order].cost访问成本,或者在您的情况下(如果我理解正确的话),使用menu1.menu[order].cost访问成本
希望对你有帮助,或者回答了你的问题。

k4emjkb1

k4emjkb12#

您可以尝试在类上编写一个新函数,以帮助获取成本信息。假设MenuItem类有一个名为“cost”的私有属性,并且Menu类可以访问它的属性

Class Menu:
.
.
.
def get_cost(self, drink):
    return drink.cost

在其他脚本中:

.
.
drink = menu1.find_drink(order) #its better to have a structure like this instead of calling the function directly.
order = menu1.get_cost(drink)

相关问题