You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:35:33