Python类是否可以实现字典接口(__setitem__
等(,从而支持语法:
mapFile['outer']['inner'] = 'value'
好像有嵌套的字典?该类将用作磁盘上具有键值结构的文件的读写接口。
举个简单的例子,如果磁盘上的文件具有以下键/值:
'a' = '1'
'b' = '2'
'c/d' = '3'
'c/e' = '4'
然后这个班可以做
>> mapFile['c']['d']
'3'
>> mapFile['b']
'2'
>> mapFile['c']['d'] = '5'
>> mapFile['c']['d']
'5'
一种方法是将语法改为:
mapFile['c', 'd'] = '5'
然而,这不是所需的语法,因为它将元组传递到__setitem__
中。
答案是肯定的,因为您可以从__getitem__()
返回任何内容,包括类似dict的对象:
作为一个有BIG缺陷的琐碎例子(见下文(:
import dbm
class NameBasedDbm(object):
def __init__(self):
self.__open_files = {}
def __getitem__(self, filename):
db = self.__open_files.get(filename)
if not db:
db = dbm.open(filename, 'c')
self.__open_files[filename] = db
return db
db = NameBasedDbm()
db['test.db']['a'] = '1'
print db['test.db']['a']
警告这只是一个示范性的例子,不要(我是认真的(在任何严肃的程序中使用它,因为它打开文件,永远不会关闭它们。
正确地执行此操作需要了解更多关于可接受用法的信息,例如,保持文件打开多长时间可以,或者重新打开文件以进行任何字典访问的性能是否可以接受,以及关于所需线程安全性的信息。