__dict__是 不是 对Python对象的特殊方法。它用于属性字典;
dict()从不使用它。
相反,您可以支持 迭代
;当
dict()传递产生键值对的可迭代对象时,将生成一个具有这些键值对的新字典对象。
您可以通过实现一个
__iter__方法来提供iterable,该方法应返回iterator。将该方法实现为生成器函数就足够了:
class Foo(object): def __init__(self, *values): self.some_sequence = values def __iter__(self): for key in self.some_sequence: yield (key, 'Value for {}'.format(key))演示:
>>> class Foo(object):... def __init__(self, *values):... self.some_sequence = values... def __iter__(self):... for key in self.some_sequence:... yield (key, 'Value for {}'.format(key))... >>> f = Foo('bar', 'baz', 'eggs', 'ham')>>> dict(f){'baz': 'Value for baz', 'eggs': 'Value for eggs', 'bar': 'Value for bar', 'ham': 'Value for ham'}您也可以继承子类
dict,或实现Mapping抽象类,并
dict()识别二者之一并将键和值复制到新的字典对象中。这还需要更多的工作,但是如果您希望自定义类也像其他地方的映射一样工作,那么这可能是值得的。



