1
次のコードは、Tkinterモジュールを使用して簡単なGUIを作成します。ユーザ定義オブジェクトの辞書的な値の割り当てをどのように定義しますか?
import Tkinter
root = Tkinter.Tk()
myContainer1 = Tkinter.Frame(root)
myContainer1.pack()
button1 = Tkinter.Button(myContainer1)
button1["text"]= "Hello, World!"
button1["background"] = "green"
button1.pack()
root.mainloop()
は今、次のコードビットを見て:
button1["text"]= "Hello, World!"
この構文は、辞書のキーに値を割り当てると同じように見えます。 ユーザー定義オブジェクトのこの動作の可能性をどのように定義しますか? 次のような例を示してもらえ:私は実行してe["alpha"]
に割り当てられた値42
を呼び出すようにしようとしている :
class Example(object):
def __init__(self, length = 1, width= 2):
self.length = length
self.width = width
編集1(応答がKindall氏とjsbuenoします)あなたのコードに
print e["alpha"]
は、私が追加:
def __getitem__(self, key, value):
if key in self.validkeys:
getattr(self, key, value)
else:
raise KeyError
しかし、私はまだ 'Example'はsubscriptable TypeErrorではありません。
編集2
def __getitem__(self, key):
if key in self.validkeys:
return getattr(self, key)
else:
raise KeyError
ありがとう:
組み込み型で辞書やその他をエミュレートするための完全なドキュメントをチェック!私は 'print '[" alpha "]'とタイプして値 '42'を呼び出そうとしています。私は '__getitem__'を定義してこれを定義しました。しかし、私はまだTypeErrorを取得します。編集したオリジナルの応答を確認できますか? – Bentley4
'__getitem __()'は2つの引数だけをとります。あなたは3つを取っています。私はそれが問題だと確信しています。 – kindall