Ben*_*ey4 1 python dictionary class
以下代码使用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()
Run Code Online (Sandbox Code Playgroud)
现在看下面的代码:
button1["text"]= "Hello, World!"
Run Code Online (Sandbox Code Playgroud)
此语法与为字典键分配值相同.如何为用户定义的对象定义此行为的可能性?你能用一个例子来表示:
class Example(object):
def __init__(self, length = 1, width= 2):
self.length = length
self.width = width
Run Code Online (Sandbox Code Playgroud)
编辑1(对kindall和jsbueno的响应):我正在尝试通过执行以下操作来调用42
分配的值e["alpha"]
:
print e["alpha"]
Run Code Online (Sandbox Code Playgroud)
我的代码添加了:
def __getitem__(self, key, value):
if key in self.validkeys:
getattr(self, key, value)
else:
raise KeyError
Run Code Online (Sandbox Code Playgroud)
但我仍然得到'示例'不是可订阅的TypeError.
编辑2
def __getitem__(self, key):
if key in self.validkeys:
return getattr(self, key)
else:
raise KeyError
Run Code Online (Sandbox Code Playgroud)
定义__setitem__()
; 看到这里.也有相应的__getitem__()
.
至于一个例子:
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
Run Code Online (Sandbox Code Playgroud)
查看有关模拟字典和其他内置类型的完整文档:http: //docs.python.org/reference/datamodel.html
归档时间: |
|
查看次数: |
137 次 |
最近记录: |