python - Python 让我覆盖自定义类中的运算符。但是我可以重新定义运算符如何处理基本数据类型吗?
问题描述
只是为了澄清,我无法想象曾经想要这样做。但是,假设我想修改==
工作方式。不是在我正在制作的自定义类的上下文中,而是在所有情况下。例如,假设我想重新定义==
它以忽略其操作数并True
在所有情况下返回。
所以,
>>>> 1 == 5
True
>>>> True == False
True
这可以做到吗?在我知道之前,我的好奇心不会让我休息。谢谢!
解决方案
我很确定你不能重载内置类型的运算符。但我想你可以把它包起来
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
这几乎是我能想到的实现接近你要求的东西的唯一方法。
推荐阅读
- css - React vs CSS 动画(转换:translateX)
- python - 从所有条形图颜色相同的数据框中绘制堆叠条形图
- git - git clone 一个带有内联 ssh 凭据的项目?
- java - 如何调用paintcomponent 方法?
- angular - 无法重置 typeahead 组件的输入值
- ios - 插入 UIImageView 时行路径被屏蔽
- python - Python:字典某些值的总和
- c# - 将对象列表序列化为单个 JSON 对象,以属性为键
- reactjs - 如何从 React Native 中的另一个文件调用一个类的函数?
- c# - 在 Windows 10 上隐藏和显示任务栏