在Python编程中,你是否曾经好奇过为什么我们可以直接使用 % 符号对数字进行取模运算?这背后其实是由一个叫做 __mod__ 的特殊方法(也称为“魔术方法”或“双下划线方法”)在起作用。
本文将带你从零开始,详细讲解 Python __mod__方法 的原理、用法和实际应用场景,即使你是编程新手,也能轻松掌握!

__mod__ 是Python中的一个魔术方法(Magic Method),当你在对象上使用 % 运算符时,Python会自动调用该对象的 __mod__ 方法。
例如:
a = 10b = 3result = a % b # 实际上等价于 a.__mod__(b)print(result) # 输出: 1在这个例子中,10 % 3 被解释为 (10).__mod__(3),返回余数 1。
当我们创建自己的类(比如表示时间、坐标、复数等)时,可能希望支持 % 运算。这时,就需要重写(override)__mod__ 方法。
通过自定义 Python取模运算 行为,我们可以让自定义对象具备更自然、直观的操作方式,提升代码可读性和用户体验。
下面是一个简单的例子:我们定义一个 Number 类,并为其添加 __mod__ 方法。
class Number: def __init__(self, value): self.value = value def __mod__(self, other): if isinstance(other, Number): return self.value % other.value elif isinstance(other, (int, float)): return self.value % other else: return NotImplemented def __repr__(self): return f"Number({self.value})"# 使用示例num1 = Number(17)num2 = Number(5)print(num1 % num2) # 输出: 2print(num1 % 3) # 输出: 2注意几点:
__mod__ 接收两个参数:self(左操作数)和 other(右操作数)other(如 int、float 或同类对象)NotImplemented,而不是抛出异常(这样Python会尝试调用 other.__rmod__)假设我们要定义一个表示秒数的 Time 类,并希望用 % 来计算“剩余秒数”(比如总秒数对60取模得到秒部分)。
class Time: def __init__(self, total_seconds): self.total_seconds = total_seconds def __mod__(self, divisor): if isinstance(divisor, int): return self.total_seconds % divisor else: return NotImplemented def __repr__(self): return f"Time({self.total_seconds}s)"# 示例my_time = Time(125)seconds_part = my_time % 60print(f"125秒中的秒部分是: {seconds_part}") # 输出: 5__mod__ 和 __divmod__:后者同时返回商和余数(对应内置函数 divmod())__mod__ 中检查 other 的类型,避免意外错误5 % my_obj,还需实现 __rmod__ 方法通过本教程,你已经掌握了 Python __mod__方法 的核心概念和使用技巧。它是 Python魔术方法 家族中的重要一员,允许你为自定义类赋予 % 运算的能力。
无论你是想实现数学类、时间类,还是其他需要取模逻辑的对象,Python自定义类运算 都能让你的代码更加优雅和直观。
现在,不妨动手试试,为你自己的类添加 __mod__ 方法吧!
本文由主机测评网于2025-12-24发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251212196.html