0

私はオンライン ウィキブックを介して Python を独学していますが、演算子のオーバーロードを使用した例の 1 つで紛らわしいエラーに遭遇しました。例によると:

class FakeNumber:
    n = 5
    def __add__(A,B):
        return A.n + B.n

c = FakeNumber()
d = FakeNumber()
d.n = 7

c.__imul__ = lambda B: B.n - 6
c *= d
c

を返すはずです
1
が、代わりに次のようになります:
TypeError: unsupported operand type(s) for *=: 'FakeNumber' and 'FakeNumber'

オブジェクトを掛け合わせることはできないと思いますが、では のポイントはc.__imul__ = lambda B: B.n - 6何ですか? 何か足りないものはありますか、または不適切な構文はどこにありますか?

参照: http://en.wikibooks.org/wiki/Python_Programming/Classes#Operator_Overloading

4

2 に答える 2

0

リンクはPython 2を説明しており、Python 3で試しています。違いは詳細に説明できます(知りたい場合は、「古いスタイルのクラス」と「新しいスタイルのクラス」を探してください)が、次のように続きます。のような特別なメソッドは、インスタンス__imul__で定義されている場合、常に無視されるようになりました。インスタンスのクラスで定義されている場合にのみ呼び出されます。だからライン

c.__imul__ = lambda B: B.n - 6

+=演算子の動作を定義するという意図された効果はありません。cクラスの単なるインスタンスですC

于 2013-05-23T21:19:35.527 に答える