Ant*_*ton 7 python overloading operator-overloading
例如,如果我尝试这样做:
a_string + an_int
Run Code Online (Sandbox Code Playgroud)
...其中 a_string 是“str”类型,an_int 是“int”类型,或者:
an_int + a_string
Run Code Online (Sandbox Code Playgroud)
会有 aTypeError
因为没有类型的隐式转换。我知道,如果我使用自己的 int 和 string 子类,我将能够重载__add__()
我的类中的方法来实现此目的。
但是,出于好奇,我想知道:是否可以在int
and的类定义中重载 + 运算符str
,以便__add__(int,str)
and__add__(str,int)
自动将它们连接为字符串?
如果不是,那么程序员不应重载本机数据类型的运算符的原因是什么?
一般来说,在不恢复到 C 级 API 的情况下,您无法修改内置类型的属性(请参阅此处)。但是,您可以对内置类型进行子类化,并对新类型执行您想要的操作。对于您特别提出的问题(基于加法字符串),您需要修改__add__
和__radd__
:
class Int(int):
def __add__(self, other):
return Int(int(str(self) + str(other)))
def __radd__(self, other):
return Int(str(other) + str(self))
>>> Int(5) + 3
53
>>> 3 + Int(5) + 87
3587
Run Code Online (Sandbox Code Playgroud)