python-动态重载运算符
我想知道,是否有办法在运行时重载Python中的运算符。例如:python-动态重载运算符,python,operator-overloading,overriding,overloading,Python,Operator Overloading,Overriding,Overloading,我想知道,是否有办法在运行时重载Python中的运算符。例如: class A: pass a = A() a.__str__ = lambda self: "noice" print(str(a)) 所需的输出是“noice”,但给定的代码使用对象的str函数实现,从而产生如下结果: 为什么代码不使用重载函数的重写实现 使用的Python版本是3.9.2当您调用str(a)时,它解析为a.\uuu class.\uu str(a),而不是a.\uu str() 您必
class A:
pass
a = A()
a.__str__ = lambda self: "noice"
print(str(a))
所需的输出是“noice”
,但给定的代码使用对象的str
函数实现,从而产生如下结果:
为什么代码不使用重载函数的重写实现
使用的Python版本是3.9.2
当您调用str(a)
时,它解析为a.\uuu class.\uu str(a)
,而不是a.\uu str()
您必须将该函数分配给类,而不是类的实例
>>> class A:
... pass
...
>>> a = A()
>>> a.__str__ = lambda x: 'hi'
>>> print(a)
<__main__.A object at 0x000000A4D16C1D30>
>>> A.__str__ = lambda x: 'hi'
>>> print(a)
hi
>>A类:
... 通过
...
>>>a=a()
>>>a.。uuuu str_uuuuu=lambda x:“你好”
>>>印刷品(a)
>>>A.。uuuu str_uuuuu=lambda x:“你好”
>>>印刷品(a)
你好
您只能在运行时重载类方法,但不能重载该类实例的方法您是否确实希望a
具有与a
类的其他实例不同的\u str\u
?若然,原因为何?或者你只想在事后更改类“\uuu str\uuu
”?回答你的问题了吗?
>>> class A:
... pass
...
>>> a = A()
>>> a.__str__ = lambda x: 'hi'
>>> print(a)
<__main__.A object at 0x000000A4D16C1D30>
>>> A.__str__ = lambda x: 'hi'
>>> print(a)
hi