set文とget文を使用する関数の辞書を作成し、setとして使用して関数を取得する方法はありますか?辞書項目で__get__、__set__を使用しますか?
class thing(object):
def __init__(self, thingy)
self.thingy = thingy
def __get__(self,instance,owner):
return thingy
def __set__(self,instance,value):
thingy += value
theDict = {"bob":thing(5), "suzy":thing(2)}
theDict["bob"] = 10
辞書が数値
print theDict["bob"]
>>> 10
のエントリを置き換えることで、結果は10が設定された機能の中に入ることで、既存の5
print theDict["bob"]
>>> 15
実際の結果に追加したかったですなぜ、私はちょうど..のような機能を作ることができないのですか? theDict ["bob"]。add(10) は、 g関数を使用してgetとgetを実行します。私が扱っているケースは端的なケースであり、この1つのケースで作業をするためにすべてを再プログラムするのは意味がありません。
このセットのインスタンスを格納するには何らかの手段が必要ですが、アクセス可能であるが既存の参照を破損する可能性のある深さのレイヤを作成しないようにする必要があります。
実際のコードは尋ねないでください。問題をカプセル化するためにコードページが必要になります。
は一体何?いいえ、 '__get__'と' __set__'はそのようなことはしません。私はあなたの既存のデザインが記述子が添付されているクラスのオブジェクトではなく、ディスクリプタ自体に 'thingy'を格納しているならば、あなたの既存のデザインを非常に疑っています。 – user2357112
私はこの質問についてもかなり混乱しています...あなたがしようとしていることに関連する '__get__'と' __set__'の仕組みを理解できません。あなたが望む方法でデリゲートされたdictを更新するために '__getitem__'と' __setitem__'をオーバーライドするラッパークラスを作成することができました。しかし、いくつかの実際のコード(またはあなたが実際に達成しようとしているものの少なくとも最小限の例)を見ることなく、それ以上のアドバイスをするのは難しいでしょう... – mgilson
どのオブジェクトがあなたのカスタムビヘイビアを担当するかを決めます。今すぐ辞書( 'theDict [" bob "] = 10')のアクションを実行して' theDict'のキー 'bob'に10を割り当てます(ご覧の通り、しかし、「もの」のカスタムロジックを悪用しようとします。カスタムロジックが '物事 'にある場合は、'物事'にそれを行うように依頼してください.dictを要求しないでください。そして、できなければ、あなたのデザインを考え直してください。 –