canfeng0522 发表于 2023-4-17 19:35:00

类方法调用

这里面为什么是self.x.extend()呢?这句话没看懂{:10_266:} 它的作用是啥呢?
# 作者:小甲鱼
# 来源:https://fishc.com.cn/thread-213592-1-1.html
# 本代码著作权归作者所有,禁止商业或非商业转载,仅供个人学习使用,违者必究!
# Copyright (c) fishc.com.cn All rights reserved

class Meet:
    nums = 0

class Egg(Meet):
    name = "鸡蛋"
    price = 1

class Beef(Meet):
    name = "牛肉"
    price = 25

class Mutoon(Meet):
    name = "羊肉"
    price = 30

class Vegetable:
    nums = 0

class Onion(Vegetable):
    name = "洋葱"
    price = 2

class Tomato(Vegetable):
    name = "番茄"
    price = 2

class Potato(Vegetable):
    name = "土豆"
    price = 3

class Radish(Vegetable):
    name = "萝卜"
    price = 3

class Menu:
    def order(self):
      self.x = []
      print("客官想要吃点什么?")
      print(type(self.x))

      dishes = input("1.洋葱炒牛肉;2.洋葱炒羊肉;3.煎蛋;4.番茄炒蛋;5.土豆萝卜炖羊肉:")
      dishes = dishes.split()

      while dishes:
            dish = dishes.pop(0)
            
            if dish == '1':
                onion = Onion()
                onion.num = 1
                beef = Beef()
                beef.num = 1
                self.x.extend()
                for each in self.x:
                  print(each)

            if dish == '2':
                onion = Onion()
                onion.num = 1
                mutoon = Mutoon()
                mutoon.num = 1
                self.x.extend()

            if dish == '3':
                egg = Egg()
                egg.num = 2
                self.x.append(egg)

            if dish == '4':
                tomato = Tomato()
                tomato.num = 2
                egg = Egg()
                egg.num = 3
                self.x.extend()

            if dish == '5':
                potato = Potato()
                potato.num = 2
                radish = Radish()
                radish.num = 1
                mutoon = Mutoon()
                mutoon.num = 2
                self.x.extend()
            
    def pay(self):
      total = 0
      for each in self.x:
            print(each.name, each.price, "*", each.num)
            total += each.price * each.num

      print(f"感谢惠顾,您一共消费了 {total} 元,欢迎下次光临~")

isdkz 发表于 2023-4-17 19:35:01

这个代码中定义了多个类,它们分别代表不同的食材和菜品。其中 Menu 类负责处理顾客的点餐过程和结账。

在 Menu 类中,order 方法用于处理用户输入的点菜信息。self.x 是一个列表,用于存储顾客点的菜品中所包含的食材。self.x.extend() 这句话的作用是将两个食材(牛肉和洋葱)添加到 self.x 列表中。

这里的 extend 方法是 Python 中列表对象的一个方法,它接受一个可迭代对象作为参数(这里是一个列表),并将其元素添加到原列表的末尾。在这个例子中,beef 和 onion 两个对象分别表示牛肉和洋葱这两种食材,它们都是类实例。

简而言之,self.x.extend() 这句话的作用就是将牛肉和洋葱这两种食材添加到顾客点的菜品的食材列表中。

canfeng0522 发表于 2023-4-17 19:40:25

isdkz 发表于 2023-4-17 19:37
这个代码中定义了多个类,它们分别代表不同的食材和菜品。其中 Menu 类负责处理顾客的点餐过程和结账。

...

那这句话就是将实例化对象添加进列表里面,在后面计算价格的时候遍历列表使用它的属性“each.name”和“each.price”,是这个意思不?

isdkz 发表于 2023-4-17 19:43:29

canfeng0522 发表于 2023-4-17 19:40
那这句话就是将实例化对象添加进列表里面,在后面计算价格的时候遍历列表使用它的属性“each.name”和“e ...

是的,您理解得非常正确!self.x.extend() 这句话将实例化的对象添加到列表 self.x 里面。在后续的 pay 方法中,程序遍历这个列表,通过访问每个对象(食材)的属性 each.name 和 each.price 来计算菜品的总价格。

例如,当顾客点了洋葱炒牛肉(选项1)时,程序会将 Beef 类和 Onion 类的实例化对象添加到列表 self.x 中。然后,在调用 pay 方法时,程序会遍历 self.x 中的每个对象,获取它们的名称(each.name)和价格(each.price),并根据数量(each.num)计算总价。

这种方法使得代码结构清晰、易于扩展。如果要添加新的食材或菜品,只需在对应位置定义新的类,并在 order 方法中处理新的选项,然后 pay 方法会自动处理这些新的食材。

canfeng0522 发表于 2023-4-17 19:45:53

isdkz 发表于 2023-4-17 19:43
是的,您理解得非常正确!self.x.extend() 这句话将实例化的对象添加到列表 self.x 里面。在后续的 pay...

好滴~谢谢
页: [1]
查看完整版本: 类方法调用