2

Pythonで++演算子をオーバーロードすることは可能ですか?

4

5 に答える 5

20

++Python には演算子はありません(「--」も)。インクリメントは通常、+=代わりに演算子で行われます。

于 2009-04-21T21:52:13.067 に答える
18

いいえ、Python では演算子ではないため、単項 ++ 演算子をオーバーロードすることはできません。

Python 構文で許可されている演算子 (言語で既に 1 つ以上の用途がある演算子) のみ (のサブセット) をオーバーロードできます。

これらは有効な Python 演算子であり、このページではそれらをオーバーロードするために定義できるメソッド (先頭と末尾に 2 つのアンダースコアがあるもの) を一覧表示します。

他の言語で一般的に使用される i++ の代わりに、Python では i += 1 と書きます。

Python では、+ 記号の右側にオペランドが必要です。左側にオペランドがある場合もあり、その場合は単項演算子ではなく二項演算子として解釈されます。+5、++5、...、++++++5 はすべて有効な Python 式 (すべて 5 に評価される) であり、7 + 5、7 ++ 5、...、7 ++++ も同様です。 ++++ 5 (すべて 7 + (+...+5) = 12 と評価されます)。5+ は有効な Pythonではありません。この質問も参照してください。

別のアイデア: ++ 演算子を実際に使用したい目的に応じて、単項 (プレフィックス) プラス演算子のオーバーロードを検討することをお勧めします。これにより、奇妙なコードになる可能性があることに注意してください。あなたのコードを見ている他の人は、おそらく何もしないと思い込んで混乱するでしょう。

于 2009-04-21T21:51:54.987 に答える
7

誰もが良い点を挙げていますが、もう 1 つだけ明確にしたいと思います。Python インタープリターを開いて、これを確認してください。

>>> i = 1
>>> ++i
1
>>> i
1

Python には ++ (または --) 演算子はありません。(構文エラーではなく) このように動作する理由は、 + と - が有効な単項演算子であり、基本的に数字に対する符号のように動作するためです。++i「+(+i)」や--i「-(-i)」と考えることができます。他の言語と同じように動作することを期待++iすると、非常に陰湿なバグハントにつながります。C プログラマー: 注意してください。

ストレートi++オアi--は十分に失敗しますが、それだけの価値があります。

于 2009-04-21T22:05:23.797 に答える
5

あなたはそれをハックすることができますが、これはいくつかの望ましくない結果をもたらします:

class myint_plus:
    def __init__(self,myint_instance):
        self.myint_instance = myint_instance

    def __pos__(self):
        self.myint_instance.i += 1
        return self.myint_instance

class myint:
    def __init__(self,i):
        self.i = i

    def __pos__(self):
        return myint_plus(self)

    def __repr__(self):
        return self.i.__repr__()


x = myint(1)
print x
++x
print x

出力は次のとおりです。

1
2
于 2009-07-28T22:49:21.630 に答える
5

++ 演算子は Python には存在しないため、オーバーロードすることはできません。

次のようなことをするとどうなりますか。

1 ++ 2

実際には

1 + (+2)
于 2009-04-21T21:53:05.670 に答える