这名字没人用吧? 2021-08-26 19:24 采纳率: 100%
浏览 72
已结题

Python 3.9.6中子类方法中使用for循环遍历列表,循环只执行一次打印出整个列表

调用子类方法,方法中使用for循环遍历元组,循环只执行一次打印出元组,不是预想的单个元素打印的效果。

代码
父类相关代码


class Restaurant:
    """餐馆的描述与营业状态"""

    def __init__(self, restaurant_name, cuisine_type):
        """初始化属性restaurant_name和cuisine_type"""
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
        self.number_served = 8

    def describle_restaurant(self):
        """描述餐馆的信息"""
        print(f'The restaurant name is {self.restaurant_name}.')
        print(f'There are {self.number_served} persons visited '
              f'{self.restaurant_name}.')
        print(f"{self.restaurant_name}'s type is {self.cuisine_type}.")

创建子类代码

class IceCreamStand(Restaurant):
    """冰淇淋子类继承餐馆父类"""

    def __init__(self, restaurant_name, cuisine_type, *flavors):
        """
        初始化父类属性,再初始化子类属性
        """
        super().__init__(restaurant_name, cuisine_type)
        self.flavors = flavors

    def show_ice(self):
        print(f"\nThe following is the kind of this icecream:")
        for flavor in self.flavors:
            print(f'{flavor}')


方法调用

kind = ('香草', '蓝莓', '柠檬', '西瓜', '草莓', '猫屎')
re = IceCreamStand('蜜雪冰城', '冰淇淋', kind)
re.describle_restaurant()
re.show_ice()

show_ice()是子类特有的方法,
执行结果

img
尝试解决,修改子类方法

def __init__(self, restaurant_name, cuisine_type):
        """
        初始化父类属性,再初始化子类属性
        """
        super().__init__(restaurant_name, cuisine_type)
        self.flavors = []

直接使用实例re.flavors = kind 传入实参得到预期结果

img
疑惑是为什么第一种方式不可以,是因为初始化父类属性时不能直接在_init_()方法中添加子类属性(不能的话,但是实参能传进去)。

  • 写回答

3条回答 默认 最新

  • 关注
    你子类代码中
    
        def __init__(self, restaurant_name, cuisine_type, *flavors):
    
    *flavors是把剩余参数打包形成一个元组,而你调用时传的kind也是一个元组
    flavors就成了一个嵌套二层的元组
    ( ('香草', '蓝莓', '柠檬', '西瓜', '草莓', '猫屎'),)
    
    
    需要在调用时用*kind把这个元组拆解开
    
        re = IceCreamStand('蜜雪冰城', '冰淇淋', *kind)
    
    或者 子类代码 *flavors改成flavors 直接接受kind元组
        def __init__(self, restaurant_name, cuisine_type, flavors):
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月3日
  • 已采纳回答 8月26日
  • 创建了问题 8月26日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题