0

我想重新定义__add__方法,int以便使用如下:

 >> 1+2
 => "1 plus 2"

 >> (1).__add__(2)
 => "1 plus 2"

我试过这个:

 >>> int.__add__ = lambda self, x: str(self)+" plus " + str(x)

但是,它会引发异常:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type 'int'

有没有人知道为什么我不能重新定义这样的__add__方法?还有其他方法吗?

4

2 回答 2

3

创建自己的类,它覆盖类的__add__方法int

In [126]: class myint(int):
    def __add__(self,a):
        print "{0} plus {1}".format(self,a)
   .....:         

In [127]: a=myint(5)

In [128]: b=myint(6)

In [129]: a+b
5 plus 6
于 2013-01-06T15:33:30.240 回答
0

虽然不是最佳实践,但您可以使用forbiddenfruit覆盖该__add__方法。用法:

>>> from forbiddenfruit import curse
>>> curse(int, '__add__', lambda x, y: f"{x} plus {y}")
>>> 1 + 2
'1 plus 2'
于 2020-11-23T20:05:51.903 回答