是否可以重载本机数据类型的运算符?

2023-12-19

例如,如果我尝试这样做:

a_string + an_int

...其中 a_string 是“str”类型,an_int 是“int”类型,或者:

an_int + a_string

会有一个TypeError因为没有隐式类型转换。我明白,如果我使用自己的 int 和 string 子类,我将能够重载__add__()我的课程中的方法来实现这一点。

但是,出于好奇,我想知道:是否可以在类定义中重载 + 运算符int and str, 以便__add__(int,str) and __add__(str,int)自动将它们连接为字符串?

如果不是,那么程序员不应重载本机数据类型的运算符的原因是什么?


一般来说,在不恢复到 C 级 API 的情况下,您无法修改内置类型的属性(请参阅here https://stackoverflow.com/questions/2444680/how-do-i-add-my-own-custom-attributes-to-existing-built-in-python-types-like-a)。但是,您可以对内置类型进行子类化并对新类型执行您想要的操作。对于您特别提出的问题(基于加法字符串),您需要修改__add__ and __radd__ https://docs.python.org/3/reference/datamodel.html:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以重载本机数据类型的运算符? 的相关文章

随机推荐