如何在Python中重写Integer类?实现自定义可迭代整数类
可行的实现思路:组合而非继承
由于int是不可变类型,直接继承无法修改实例自身的数值状态;而继承numbers.Integral又需要重写大量抽象方法,显然不是最优解。这里推荐使用组合模式:不直接继承整数类,而是在类内部维护一个整数属性,同时按需实现必要的魔法方法来模拟整数的行为,并实现迭代器协议。
具体实现代码
class Iter: def __init__(self, start=0, increment=1): self.value = start self.increment = increment def __repr__(self): return f"Iter<{self.value}>" # 实现迭代器协议:返回自身 def __iter__(self): return self def __next__(self): self.value += self.increment return self # 实现与整数的相等比较 def __eq__(self, other): if isinstance(other, int): return self.value == other elif isinstance(other, Iter): return self.value == other.value return False # 实现与整数的加法 def __add__(self, other): if isinstance(other, int): return self.value + other return NotImplemented # 支持反向加法(如 10 + i) def __radd__(self, other): return self.__add__(other)
测试验证
运行代码后可以复现你需要的行为:
>>> i = Iter() >>> i == 0 True >>> next(i) Iter<1> >>> next(i) Iter<2> >>> i + 10 12 >>> 10 + i 12
扩展说明
如果需要更多整数相关的操作(如减法、乘法、比较运算符等),只需按需实现对应的魔法方法即可,比如:
- 减法:
__sub__和__rsub__ - 小于比较:
__lt__ - 转换为整数:
__int__
这种方式既避免了不可变类型的限制,又不用被迫重写大量抽象方法,完全贴合你的需求。
内容的提问来源于stack exchange,提问作者nowox
相关产品推荐
相关产品推荐

