您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在python类上重载__dict __()

在python类上重载__dict __()

__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()识别二者之一并将键和值复制到新的字典对象中。这还需要更多的工作,但是如果您希望自定义类也像其他地方的映射一样工作,那么这可能是值得的。

python 2022/1/1 18:25:52 有519人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶