1365156784 发表于 2023-8-8 15:38:23

零基础入门学习python最新版类与模块III的动动手

# 作者:小甲鱼
# 来源: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("客官想要吃点什么?")

      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()

            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()
      print(self.x)
            
    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} 元,欢迎下次光临~")










以上是一个用于点菜的代码,有两个菜都需要调用Egg,并且对属性num有不同的赋值然而却选择了相同的对象名,表达式都为egg = Egg()。这样多次实例化一个类用的都是同一个对象名是可以的吗? 求解答

isdkz 发表于 2023-8-8 15:38:32

在这段代码中,多次实例化一个类使用相同的对象名是可以的。因为在Python中,对象是通过引用来操作的。当你多次使用相同的对象名实例化一个类时,实际上是在不同的变量中保存了同一个对象的引用。所以,虽然对象名相同,但它们实际上是不同的变量,分别指向了同一个对象。因此,每个对象都可以独立地修改和访问它们的属性。

陶远航 发表于 2023-8-8 15:38:36

在这段代码中,使用了同一个对象名 egg 来实例化多个 Egg 对象。实例化多个对象并使用相同的对象名是可以的,但是需要注意的是,每次实例化都会创建一个新的对象,因此前面实例化的对象会被后面的对象覆盖。

在这个例子中,每次通过 egg = Egg() 创建一个新的 Egg 对象时,之前保存在 egg 中的对象会被新的对象所替代。所以当后面的菜品需要调用 Egg 类时,之前的 egg 对象已经不存在了,而是被新的 Egg 对象所代替。

如果希望保存多个 Egg 对象,可以考虑使用一个列表来存储这些对象,示例如下:

eggs = []
eggs.append(Egg())# 第一个菜品使用 Egg 类
eggs.append(Egg())# 第二个菜品使用 Egg 类


这样,就能在列表 eggs 中保存多个 Egg 对象,每个对象都是独立的。
如果问题已经解决,请设置最佳答案

学习编程中的Ben 发表于 2023-8-8 15:38:50

问题解答:

在这段代码中,多次实例化一个类并使用相同的对象名是可以的,因为每次实例化都会创建一个新的对象,并将其赋值给对象名。虽然使用相同的对象名,但是它们指向的是不同的内存空间,所以不会互相干扰。

在这个例子中,使用相同的对象名egg是合法的,因为每次实例化Egg类都会创建一个新的egg对象。这些对象具有不同的属性和方法,尽管对象名相同,但它们在内存中是不同的实例。

如果你想让每个菜品都创建一个独立的对象,可以修改代码如下:

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

      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()

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

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

            if dish == '4':
                tomato = Tomato()
                tomato.num = 2
                egg2 = Egg()
                egg2.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()
      print(self.x)

    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} 元,欢迎下次光临~")


以上修改后的代码中,每个菜品都创建了一个独立的对象,对象名也相应地进行了修改,以确保每个对象都是唯一的。这样做可以保证每个对象都有自己独立的属性和方法。

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 零基础入门学习python最新版类与模块III的动动手