如何创建仅保留append方法的自定义collections.deque子类并移除appendleft方法?
解决自定义Deque类移除appendleft方法的问题
首先,你遇到的问题根源在于:Python不允许直接修改内置/扩展类型(比如collections.deque)的属性。内置类型的方法是受保护的,不能通过del或者直接赋值来改动,这就是为什么你会看到TypeError: can't set attributes of built-in/extension type 'collections.deque'这个错误。
正确的实现方式
不需要修改父类,我们只需要在自定义子类中覆盖appendleft方法,让它抛出符合预期的AttributeError即可:
from collections import deque class CustomDeque(deque): def appendleft(self, *args, **kwargs): raise AttributeError("'CustomDeque' object has no attribute 'appendleft'")
验证效果
运行测试代码:
custom_deque = CustomDeque() custom_deque.appendleft()
会得到你期望的错误输出:
AttributeError Traceback (most recent call last) ----> 1 custom_deque.appendleft() AttributeError: 'CustomDeque' object has no attribute 'appendleft'
额外说明
如果你的需求是彻底让appendleft从类的属性列表中消失(比如用dir(custom_deque)看不到它),可以用更进阶的方式(比如自定义__getattribute__或使用元类),但对于绝大多数场景来说,上面的方法已经完全够用——它既阻止了appendleft的调用,又抛出了和“属性不存在”完全一致的错误信息,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Daniel Tomas
相关产品推荐
相关产品推荐

