Rya*_*rom 10
您也可以让dict子类通过覆盖将键限制为预定义列表 __setitem__()
>>> class LimitedDict(dict):
_keys = "a b c".split()
def __init__(self, valtype=int):
for key in LimitedDict._keys:
self[key] = valtype()
def __setitem__(self, key, val):
if key not in LimitedDict._keys:
raise KeyError
dict.__setitem__(self, key, val)
>>> limited = LimitedDict()
>>> limited['a']
0
>>> limited['a'] = 3
>>> limited['a']
3
>>> limited['z'] = 0
Traceback (most recent call last):
File "<pyshell#61>", line 1, in <module>
limited['z'] = 0
File "<pyshell#56>", line 8, in __setitem__
raise KeyError
KeyError
>>> len(limited)
3
Run Code Online (Sandbox Code Playgroud)
您可以轻松扩展任何内置类型.这就是你用dict做的方法:
>>> class MyClass(dict):
... def __init__(self, *args, **kwargs):
... self['mykey'] = 'myvalue'
... self['mykey2'] = 'myvalue2'
...
>>> x = MyClass()
>>> x['mykey']
'myvalue'
>>> x
{'mykey2': 'myvalue2', 'mykey': 'myvalue'}
Run Code Online (Sandbox Code Playgroud)
我无法找到谈论这个的Python文档,但是非常受欢迎的书Dive Into Python(可在线免费获得)有一些例子可以做到这一点.
| 归档时间: |
|
| 查看次数: |
4007 次 |
| 最近记录: |