鱼C论坛

 找回密码
 立即注册
查看: 941|回复: 11

[已解决]类的继承如何增加接收的实参数量

[复制链接]
发表于 2020-5-26 14:54:36 | 显示全部楼层 |阅读模式

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

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

x
我需要用self.flavors这个变量存储输入的甜品菜单,但是Icecreamstand这个类却只能接收3个实参。有大佬知道怎么解决吗
最佳答案
2020-5-26 15:31:10
一定学好python 发表于 2020-5-26 15:26
额,我想在Icecreamstand类的增加一个属性(self.flavors = a),用来储存('草莓味','西瓜味','橘子味',' ...
class Restaurant():
    def __init__(self,restaurant_name,cuisine_type,*a):
        self.name = restaurant_name
        self.type = cuisine_type
        self.number_served = 0

    def describe_restaurant(self):
        print('餐厅的名字是:'+self.name)
        print('餐厅的类型是:'+self.type)

    def open_restaurant(self):
        print('餐厅正在营业')

    def set_name_served(self,renshu):
        self.number_served = self.number_served + renshu

    def number(self):
        if self.number_served == 0:
            print('只有'+str(self.number_served)+'人在'+self.name+'就餐!')
        else:
            print('已经有'+str(self.number_served)+'人在'+self.name+'就餐了!')
class Icecreamstand(Restaurant):
    def __init__(self,restaurant_name,cuisine_type,*a):
        super().__init__(restaurant_name,cuisine_type,*a)
        self.flavors = str(a)

    def flavor(self):
        return self.name+'的冰淇淋种类有:'+str(self.flavors)

d = Restaurant('夜半食堂','中式餐饮')
d.describe_restaurant()
c = Icecreamstand('冰淇淋小店','甜品店','草莓味','西瓜味','橘子味','桃子味')
print(c.flavor())
c.describe_restaurant()

在super()__init__增加了*a为什么还是只能接收三个参数。

在super()__init__增加了*a为什么还是只能接收三个参数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-26 15:11:11 | 显示全部楼层
参数加上 * 号 可以一次性传入未知个数的参数数量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 15:16:56 | 显示全部楼层
Twilight6 发表于 2020-5-26 15:11
参数加上 * 号 可以一次性传入未知个数的参数数量

我已经的super().__init__后面加上*了,但是还是报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 15:18:14 | 显示全部楼层
一定学好python 发表于 2020-5-26 15:16
我已经的super().__init__后面加上*了,但是还是报错

代码发上来吧 我帮你改改~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 15:18:24 | 显示全部楼层
一定学好python 发表于 2020-5-26 15:16
我已经的super().__init__后面加上*了,但是还是报错

把*a去掉,我不知道你想写什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 15:26:54 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-26 15:18
把*a去掉,我不知道你想写什么

额,我想在Icecreamstand类的增加一个属性(self.flavors = a),用来储存('草莓味','西瓜味','橘子味','桃子味')这个菜单的元组,再用def flavor(self):这个方法将菜单打印出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 15:31:10 | 显示全部楼层    本楼为最佳答案   
一定学好python 发表于 2020-5-26 15:26
额,我想在Icecreamstand类的增加一个属性(self.flavors = a),用来储存('草莓味','西瓜味','橘子味',' ...
class Restaurant():
    def __init__(self,restaurant_name,cuisine_type,*a):
        self.name = restaurant_name
        self.type = cuisine_type
        self.number_served = 0

    def describe_restaurant(self):
        print('餐厅的名字是:'+self.name)
        print('餐厅的类型是:'+self.type)

    def open_restaurant(self):
        print('餐厅正在营业')

    def set_name_served(self,renshu):
        self.number_served = self.number_served + renshu

    def number(self):
        if self.number_served == 0:
            print('只有'+str(self.number_served)+'人在'+self.name+'就餐!')
        else:
            print('已经有'+str(self.number_served)+'人在'+self.name+'就餐了!')
class Icecreamstand(Restaurant):
    def __init__(self,restaurant_name,cuisine_type,*a):
        super().__init__(restaurant_name,cuisine_type,*a)
        self.flavors = str(a)

    def flavor(self):
        return self.name+'的冰淇淋种类有:'+str(self.flavors)

d = Restaurant('夜半食堂','中式餐饮')
d.describe_restaurant()
c = Icecreamstand('冰淇淋小店','甜品店','草莓味','西瓜味','橘子味','桃子味')
print(c.flavor())
c.describe_restaurant()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 15:31:47 | 显示全部楼层
一定学好python 发表于 2020-5-26 15:26
额,我想在Icecreamstand类的增加一个属性(self.flavors = a),用来储存('草莓味','西瓜味','橘子味',' ...

如果帮助到你就给个最佳吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 15:31:55 | 显示全部楼层
Twilight6 发表于 2020-5-26 15:18
代码发上来吧 我帮你改改~

class Restaurant():
        def __init__(self,restaurant_name,cuisine_type,*a): #不想在父类加*a,想直接在子类增加。有没有办法
                self.name = restaurant_name
                self.type = cuisine_type   
                self.number_served = 0
               
        def describe_restaurant(self):
                print('餐厅的名字是:' + self.name)
                print('餐厅的类型是:' + self.type)
       
        def open_restaurant(self):
                print('餐厅正在营业')
       
        def set_number_served(self,renshu):
                self.number_served = renshu

               
        def increment_number_served(self,renshu):
                self.number_served = self.number_served + renshu
               
        def number(self):
                if self.number_served == 0:
                        print('只有' + str(self.number_served) +'人在' + self.name + '就餐!')
                else:
                        print('已经有' + str(self.number_served) +'人在' + self.name + '就餐了!')



                                       
class Icecreamstand(Restaurant):
        def __init__(self,restaurant_name,cuisine_type,*a):
                super().__init__(restaurant_name,cuisine_type)
                self.flavors = a
                        
               
        def flavor(self):
                print(self.name + '的冰淇淋种类有:' + str(self.flavors) )


d = Restaurant('夜半食堂','中式餐饮')
d.describe_restaurant()
c = Icecreamstand('冰淇淋小店','甜品店','草莓味','西瓜味','橘子味','桃子味')
c.flavor()


这样是可以的,但是不想修改父类的形参,想在子类修改形参达到同样的效果。下面是有问题的代码,麻烦您给看下,谢谢啦
class Restaurant():
        def __init__(self,restaurant_name,cuisine_type):
                self.name = restaurant_name
                self.type = cuisine_type   
                self.number_served = 0
               
        def describe_restaurant(self):
                print('餐厅的名字是:' + self.name)
                print('餐厅的类型是:' + self.type)
       
        def open_restaurant(self):
                print('餐厅正在营业')
       
        def set_number_served(self,renshu):
                self.number_served = renshu

               
        def increment_number_served(self,renshu):
                self.number_served = self.number_served + renshu
               
        def number(self):
                if self.number_served == 0:
                        print('只有' + str(self.number_served) +'人在' + self.name + '就餐!')
                else:
                        print('已经有' + str(self.number_served) +'人在' + self.name + '就餐了!')


                                       
class Icecreamstand(Restaurant):
        def __init__(self,restaurant_name,cuisine_type,*a):
                super().__init__(restaurant_name,cuisine_type)
                self.flavors = a
                        
               
        def flavor(self):
                print(self.name + '的冰淇淋种类有:' + str(self.flavors) )


d = Restaurant('夜半食堂','中式餐饮')
d.describe_restaurant()
c = Icecreamstand('冰淇淋小店','甜品店','草莓味','西瓜味','橘子味','桃子味')
c.flavor()
c.describe_restaurant()

跟上面我截图的代码一模一样的,不知道为什么现在又可以运行,输出也完全符合我的预期了。。好奇怪啊

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 15:32:36 | 显示全部楼层
一定学好python 发表于 2020-5-26 15:31
class Restaurant():
        def __init__(self,restaurant_name,cuisine_type,*a): #不想在父类加*a,想直接 ...

已经用软件识图文字了...改了好一会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 15:36:25 | 显示全部楼层

我不想在父类加上*a的,只想在子类加。因为子类可以定制,那应该是可以做到的,但是发帖的时候就是报错,改了好多次都不行,刚才回消息的时候,再次尝试一下又可以了。。感谢您的帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 15:39:10 | 显示全部楼层
一定学好python 发表于 2020-5-26 15:36
我不想在父类加上*a的,只想在子类加。因为子类可以定制,那应该是可以做到的,但是发帖的时候就是报错, ...

别客气~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 04:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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