一定学好python 发表于 2020-5-26 14:54:36

类的继承如何增加接收的实参数量

我需要用self.flavors这个变量存储输入的甜品菜单,但是Icecreamstand这个类却只能接收3个实参。有大佬知道怎么解决吗

Twilight6 发表于 2020-5-26 15:11:11

参数加上 * 号 可以一次性传入未知个数的参数数量

一定学好python 发表于 2020-5-26 15:16:56

Twilight6 发表于 2020-5-26 15:11
参数加上 * 号 可以一次性传入未知个数的参数数量

我已经的super().__init__后面加上*了,但是还是报错

Twilight6 发表于 2020-5-26 15:18:14

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

代码发上来吧 我帮你改改~

永恒的蓝色梦想 发表于 2020-5-26 15:18:24

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

把*a去掉,我不知道你想写什么

一定学好python 发表于 2020-5-26 15:26:54

永恒的蓝色梦想 发表于 2020-5-26 15:18
把*a去掉,我不知道你想写什么

额,我想在Icecreamstand类的增加一个属性(self.flavors = a),用来储存('草莓味','西瓜味','橘子味','桃子味')这个菜单的元组,再用def flavor(self):这个方法将菜单打印出来

Twilight6 发表于 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()

Twilight6 发表于 2020-5-26 15:31:47

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

如果帮助到你就给个最佳吧 {:10_287:}

一定学好python 发表于 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()

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

Twilight6 发表于 2020-5-26 15:32:36

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

已经用软件识图文字了...改了好一会{:10_245:}

一定学好python 发表于 2020-5-26 15:36:25

Twilight6 发表于 2020-5-26 15:31


我不想在父类加上*a的,只想在子类加。因为子类可以定制,那应该是可以做到的,但是发帖的时候就是报错,改了好多次都不行,刚才回消息的时候,再次尝试一下又可以了。。感谢您的帮助

Twilight6 发表于 2020-5-26 15:39:10

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

别客气~
页: [1]
查看完整版本: 类的继承如何增加接收的实参数量