这名字没人用吧? 2021-08-26 11: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):
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮

    1
    回复
    这名字没人用吧? 2021-08-26 12:52

    非常感谢解惑

    回复
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 9月2日
  • 已采纳回答 8月26日
  • 创建了问题 8月26日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部