首页 > 解决方案 > Python 让我覆盖自定义类中的运算符。但是我可以重新定义运算符如何处理基本数据类型吗?

问题描述

只是为了澄清,我无法想象曾经想要这样做。但是,假设我想修改==工作方式。不是在我正在制作的自定义类的上下文中,而是在所有情况下。例如,假设我想重新定义==它以忽略其操作数并True在所有情况下返回。

所以,

>>>> 1 == 5
True

>>>> True == False
True

这可以做到吗?在我知道之前,我的好奇心不会让我休息。谢谢!

标签: pythonoperator-overloading

解决方案


我很确定你不能重载内置类型的运算符。但我想你可以把它包起来

class MyInt(int):
    def __eq__(self, other):
        return other == 5


if __name__ == '__main__':
    i = MyInt(2)
    print(i == 5)
    i += 5
    print(i == 5)
    print(i)

MyInt 类就像一个普通的 int 一样,但是它的相等性检查被覆盖并且会返回你想要的任何东西。但是,一旦您开始使用其他运算符,它将恢复为正常的 int。您还必须覆盖所有运算符,确保始终返回 MyInt。

输出:

真的

错误的

7

这几乎是我能想到的实现接近你要求的东西的唯一方法。


推荐阅读