在Python 3中,UserDict.DictMixin
類已移至collections
模塊。文檔建議使用collections.MutableMapping
代替,但是這個抽象類沒有提供DictMixin
所做的一些方法。如何在Python 3中實現UserDict.DictMixin的功能?
是否有另一種(或更好的)方式來定義它們,以便抓取UserDict.Mixin
源的私人副本,以便將其導入(或者只是複製所需的部分)到我自己的字典式類中?
在Python 3中,UserDict.DictMixin
類已移至collections
模塊。文檔建議使用collections.MutableMapping
代替,但是這個抽象類沒有提供DictMixin
所做的一些方法。如何在Python 3中實現UserDict.DictMixin的功能?
是否有另一種(或更好的)方式來定義它們,以便抓取UserDict.Mixin
源的私人副本,以便將其導入(或者只是複製所需的部分)到我自己的字典式類中?
「方法的數量」具體爲__len__
和__iter__
,所以額外的工作並不多。
def __len__(self):
return len(self.mylist)
def __iter__(self):
for i in self.mylist:
yield i
應該工作,我認爲(未經測試,雖然)。
會不會'__len__'導致無限遞歸? –
@ThomasK:是的,現在已修復。 –
當然你是對的。我誤解了我在[ABCs]的文檔中看到的內容(http://docs.python.org/py3k/library/collections.html#abcs-abstract-base-classes)。例如,我想知道在Py 2.x DictMixin.py中爲類定義的所有缺少的'interxxx()'方法......顯然忘記了它們不存在於Py 3.x中。感謝幫助我認識到我錯誤的印象。 – martineau
潛在的幫助[文章](http://python3porting.com/problems.html#replacing-userdict) –