Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python-动态重载运算符_Python_Operator Overloading_Overriding_Overloading - Fatal编程技术网

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() 您必

我想知道,是否有办法在运行时重载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 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