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 に答える