实现字典接口的类可以提供 mapFile['inner']['outer'] 语法吗?



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']

警告这只是一个示范性的例子,不要(我是认真的(在任何严肃的程序中使用它,因为它打开文件,永远不会关闭它们。

正确地执行此操作需要了解更多关于可接受用法的信息,例如,保持文件打开多长时间可以,或者重新打开文件以进行任何字典访问的性能是否可以接受,以及关于所需线程安全性的信息。

最新更新