2012-06-22 77 views
4

在Python 3中,UserDict.DictMixin類已移至collections模塊。文檔建議使用collections.MutableMapping代替,但是這個抽象類沒有提供DictMixin所做的一些方法。如何在Python 3中實現UserDict.DictMixin的功能?

是否有另一種(或更好的)方式來定義它們,以便抓取UserDict.Mixin源的私人副本,以便將其導入(或者只是複製所需的部分)到我自己的字典式類中?

+1

潛在的幫助[文章](http://python3porting.com/problems.html#replacing-userdict) –

回答

2

「方法的數量」具體爲__len____iter__,所以額外的工作並不多。

def __len__(self): 
    return len(self.mylist) 

def __iter__(self): 
    for i in self.mylist: 
     yield i 

應該工作,我認爲(未經測試,雖然)。

+1

會不會'__len__'導致無限遞歸? –

+1

@ThomasK:是的,現在已修復。 –

+0

當然你是對的。我誤解了我在[ABCs]的文檔中看到的內容(http://docs.python.org/py3k/library/collections.html#abcs-abstract-base-classes)。例如,我想知道在Py 2.x DictMixin.py中爲類定義的所有缺少的'interxxx()'方法......顯然忘記了它們不存在於Py 3.x中。感謝幫助我認識到我錯誤的印象。 – martineau