Python中继承list的自定义类调用append无法追加值如何解决?
原因分析
- 你自定义的
mylist类重写了父类list的append方法,但方法中仅实现了长度校验逻辑,没有调用父类的append方法执行实际的元素写入操作,因此调用append后不会有元素被添加到列表中 - 现有长度校验逻辑存在逻辑漏洞:仅判断追加元素前列表长度已经超过最大值时才抛出异常,无法拦截「追加后长度超过阈值」的场景,不符合最大长度限制的预期
修复方案
修改append方法的逻辑,先校验长度,再调用父类方法完成元素追加:
class mylist(list): def __init__(self, max_length): super().__init__() self.max_length = max_length def append(self, *args, **kwargs): """ Append object to the end of the list. """ # 校验追加后长度是否超过阈值 if len(self) >= self.max_length: raise Exception(f"已达到最大长度{self.max_length},无法追加元素") # 调用父类原生append方法完成元素追加 super().append(*args, **kwargs) a = mylist(5) a.append(5) print(a) # 输出:[5]
内容的提问来源于stack exchange,提问作者Jebaseelan Ravi
相关产品推荐
相关产品推荐

