python - 动态重载运算符

标签 python operator-overloading overriding overloading

我想知道是否有办法在运行时重载Python中的运算符。例如:

class A:
   pass
a = A()
a.__str__ = lambda self: "noice"
print(str(a))

所需的输出是 "noice" ,但给定的代码使用 object str 的实现相反,函数会产生如下内容: <__main__.A object at 0x000001CAB2051490> .

为什么代码不使用我的函数重载的重写实现?

使用的Python版本是3.9.2 .

最佳答案

当您调用 str(a) 时,它会解析为等效于 a.__class__.__str__(a),而不是 a.__str__().

>>> A.__str__ = lambda self: "noice"
>>> str(a)
'noice'

关于python - 动态重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66738773/

相关文章:

python - 使用 Python 和 Tkinter 进行字符串格式化

c++ - 在基于模板的类中重载赋值运算符

c# - 我怎样才能记住 super 调用父级?

java - 解决在 Java 中覆盖抽象方法的需要?

c++ - 为什么using不能用来定义虚函数?

python - 为什么 str.format() 比 str() 更好?

python - 属性是否适用于 Django 模型字段?

Python 在图中找到对应最大 y 值的 x 值

模板类上的 C++ 运算符重载

c++ - 仅在声明定义时检查 vector/数组边界