Python 如何为用户定义的对象定义类似字典的值赋值?

Python 如何为用户定义的对象定义类似字典的值赋值?,python,class,dictionary,Python,Class,Dictionary,下面的代码使用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()

下面的代码使用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!"
此语法看起来与为字典键赋值相同。 如何为用户定义的对象定义此行为的可能性? 请举例说明:

class Example(object):
    def __init__(self, length = 1, width= 2):
        self.length = length
        self.width = width

编辑1(对kindall和jsbueno的响应): 我试图通过执行以下操作调用分配给
e[“alpha”]
的值
42

print e["alpha"]
我在你的代码中添加了:

def __getitem__(self, key, value):
    if key in self.validkeys:
        getattr(self, key, value)
    else:
        raise KeyError
但我还是得到了‘示例’是不可下标的TypeError


编辑2

def __getitem__(self, key):
    if key in self.validkeys:
        return getattr(self, key)
    else:
        raise KeyError
定义
\uuuuu setitem\uuuuuuuuu()
;看见还有一个相应的
\uuu getitem\uuuu()

例如:

class Example(object):
    # define which names can be assigned using [...] syntax
    validkeys = set("alpha beta gamma".split())

    # assign valid names as attributes on our object
    def __setitem__(self, key, value):
        if key in self.validkeys:
            setattr(self, key, value)
        else:
            raise KeyError("Key must be one of %s", ", ".join(self.validkeys))

e = Example()
e["alpha"] = 42
print(e.alpha)   # prints 42
请在以下位置查看模拟词典和其他内置类型的完整文档:

定义
\uuuuu setitem\uuuuuuu()
;看见还有一个相应的
\uuu getitem\uuuu()

例如:

class Example(object):
    # define which names can be assigned using [...] syntax
    validkeys = set("alpha beta gamma".split())

    # assign valid names as attributes on our object
    def __setitem__(self, key, value):
        if key in self.validkeys:
            setattr(self, key, value)
        else:
            raise KeyError("Key must be one of %s", ", ".join(self.validkeys))

e = Example()
e["alpha"] = 42
print(e.alpha)   # prints 42
请在以下位置查看模拟词典和其他内置类型的完整文档:

谢谢!我试图通过键入
print e[“alpha”]
来调用值
42
。我通过定义
\uuu getitem\uuu
来定义它。但我还是有打字错误。你能检查一下我编辑过的原始回复吗?
\uuu getitem\uuuuuuuu()
只接受两个参数,你已经得到了三个参数。我相信这就是问题所在。谢谢!我试图通过键入
print e[“alpha”]
来调用值
42
。我通过定义
\uuu getitem\uuu
来定义它。但我还是有打字错误。你能检查一下我编辑过的原始回复吗?
\uuu getitem\uuuuuuuu()
只接受两个参数,你已经得到了三个参数。我相信这就是问题所在。