鱼C论坛

 找回密码
 立即注册
查看: 804|回复: 3

[已解决]零基础入门学习python最新版类与模块III的动动手

[复制链接]
发表于 2023-8-8 15:38:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 作者:小甲鱼
# 来源: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([beef, onion])

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

            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([tomato, egg])

            if dish == '5':
                potato = Potato()
                potato.num = 2
                radish = Radish()
                radish.num = 1
                mutoon = Mutoon()
                mutoon.num = 2
                self.x.extend([potato, radish, mutoon])
        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()。这样多次实例化一个类用的都是同一个对象名是可以的吗? 求解答
最佳答案
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([beef, onion])            if dish == '2':                onion = Onion()                onion.num = 1                mutoon = Mutoon()                mutoon.num = 1                self.x.extend([mutoon, onion])            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([tomato, egg2])            if dish == '5':                potato = Potato()                potato.num = 2                radish = Radish()                radish.num = 1                mutoon = Mutoon()                mutoon.num = 2                self.x.extend([potato, radish, mutoon])        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} 元,欢迎下次光临~")
以上修改后的代码中,每个菜品都创建了一个独立的对象,对象名也相应地进行了修改,以确保每个对象都是唯一的。这样做可以保证每个对象都有自己独立的属性和方法。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-8 15:38:32 | 显示全部楼层
在这段代码中,多次实例化一个类使用相同的对象名是可以的。因为在Python中,对象是通过引用来操作的。当你多次使用相同的对象名实例化一个类时,实际上是在不同的变量中保存了同一个对象的引用。所以,虽然对象名相同,但它们实际上是不同的变量,分别指向了同一个对象。因此,每个对象都可以独立地修改和访问它们的属性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 对象,每个对象都是独立的。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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([beef, onion])            if dish == '2':                onion = Onion()                onion.num = 1                mutoon = Mutoon()                mutoon.num = 1                self.x.extend([mutoon, onion])            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([tomato, egg2])            if dish == '5':                potato = Potato()                potato.num = 2                radish = Radish()                radish.num = 1                mutoon = Mutoon()                mutoon.num = 2                self.x.extend([potato, radish, mutoon])        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} 元,欢迎下次光临~")
以上修改后的代码中,每个菜品都创建了一个独立的对象,对象名也相应地进行了修改,以确保每个对象都是唯一的。这样做可以保证每个对象都有自己独立的属性和方法。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 09:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表