鱼C论坛

 找回密码
 立即注册
查看: 1975|回复: 5

[已解决]定制序列的课后题

[复制链接]
发表于 2020-3-28 18:08:21 | 显示全部楼层 |阅读模式

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

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

x
class Countlist(list):
    def __init__(self, *args):
        super().__init__(args)  # 调用基类的__init__方法
        self.count = []     # 赋值一个空列表
        for i in args:      # 为每一个args 设置一个对应的 计数器,初始值均为0,self.count的长度即为*args的长度
            self.count.append(0)    # 初始值为0

    def __len__(self):
        return len(self.count)      # 返回计数器的长度

    def __getitem__(self, key):     # 访问
        self.count[key] += 1        # 每获取一次值,对应的计数器加1,只有在访问时才会增加
        return super().__getitem__(key)     # 调用基类的__getitem__方法

    def __setitem__(self, key, value):      # 赋值
        self.count[key] = value         # 为计数器重新赋值
        return super().__setitem__(key, value)  # 调用基类的赋值方法

    def __delitem__(self, key):     # 删除
        del self.count[key]         # 对应的计数端也会被删除
        return super().__delitem__(key)     # 调用基类的删除方法

    def counter(self, key):     # 增加 counter(index)方法,返回 index参数所指定的元素记录的访问次数
        return self.count[key]      # 返回的是对应值的计数器次数,计数器是跟随value 而不是index

    def append(self, value):    # 添加
        self.count.append(0)    # 在添加列表时,同时添加一个计数器
        super().append(value)   # 返回基类的append方法

    def pop(self, key=-1):      # 弹出
        del self.count[key]     # 删除对应位置的计数器, 默认值为最后一个(-1)
        return super().pop(key)     # 调用基类的pop方法

    def remove(self, value):    # 移除value,
        key = super().index(value)  # 调用基类的index, 返回值key是value在序列中的位置
        del self.count[key]     # 删除对应位置的计数器
        super().remove(value)   # 调用基类的移除方法

    def insert(self, key, value):   # 插入 value
        self.count.insert(key, 0)      # 在插入value时,在相同的位置插入计数器,初始值为0
        super().insert(key, value)  # 调用基类的insert方法

    def clear(self):    # 清除列表
        self.count.clear()      # 同样清除计数器
        super().clear()     # 调用基类的clear方法

    def reverse(self):  # 反转列表
        self.count.reverse()    # 同样反转计数器
        super().reverse()   #调用基类的reverse方法

想请教,这里为什么要调用基类的方法
最佳答案
2020-3-28 18:10:40
如果不调用基类的方法就无法实现对应的功能。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-28 18:10:40 | 显示全部楼层    本楼为最佳答案   
如果不调用基类的方法就无法实现对应的功能。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-28 20:48:19 | 显示全部楼层
zltzlt 发表于 2020-3-28 18:10
如果不调用基类的方法就无法实现对应的功能。

可不可以这样理解,在重写了魔法方法后,要实现重写后的功能就必须依赖基类的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-29 08:06:28 | 显示全部楼层
yjptx121 发表于 2020-3-28 20:48
可不可以这样理解,在重写了魔法方法后,要实现重写后的功能就必须依赖基类的方法

是的,你也可以自己实现,但是相对较麻烦,还是直接扔给基类处理好~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-29 21:53:45 | 显示全部楼层
zltzlt 发表于 2020-3-29 08:06
是的,你也可以自己实现,但是相对较麻烦,还是直接扔给基类处理好~

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

使用道具 举报

发表于 2020-5-30 17:44:16 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 16:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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