2010-12-29 14 views
1

私は外界のintとして動作するクラスを持っていますが、実際にはいくつかの構造内に固定された場所を持つ可変オブジェクトです。もしnが私のオブジェクトなら、私はn.update(34)と書くことで今更新することができますが、私はいつもn = 34と書いてほしいと思っています。私はhttp://docs.python.org/reference/datamodel.htmlの上に目をやってきた、と私はトラップ=オペレータを聞かせて、私は私のオブジェクトを更新できるようにするのではなく、変数にint型を割り当てます_ _ _ _または_ _値を割り当てる_ _属性のように何も表示されません。私の物を投げ捨てる。より良いことに、もしmutableがタプルt = (m, n)の中にあるなら、私はt[1] = 34で私の変更を更新したいと思いますが、Pythonはそれを不変のものを修正しようとするものとして見ています。変更可能な内部で不変の変更可能な修正方法

私はその文書の中で、私が試していたことは、Pythonicではないことを、私は少しでも知ることができたと考えています。だから、もし私がそれをやり遂げることができないなら、次のベストは何だろう?誰かがいつか自分のコードを維持しなければならないと、それはあまりにも攻撃的ではありません。

答えて

3

あなたの基本的なobj.value = newvalueは、基本的に最も理解しやすい方法です。あなたが推測するように、Pythonで代入をオーバーライドすることはできません。

あなたのクラスに__call__()を実装して、割り当てを行うことができます。obj(newvalue)を行うだけです。しかし、カジュアルな読者にとっては、それが再割り当てだとはっきりしていません。

もう1つ考えて__ilshift__()を実装してobj <<= newvalとすることができます。もしあなたが十分に細かく見れば、少なくともある種の突然変異体の再配置操作のように見える。それが数値型でない場合、私はそれを検討するかもしれません。しかし、<<は、intで明確に定義されています。あなたがそのタイプに偽装しているので、この方法で使用するのは混乱します。

+0

これらのコンセプトに対する私の限られた理解の改善と改善のために感謝します。コードはまだ残しておきますが、私はまだそれを行うには本当の仕事がありますが、更新のための時間が来たら、私は決定を下します。 –

関連する問題