gpt4 book ai didi

python - 在 python 类上覆盖 __dict__()

转载 作者:IT老高 更新时间:2023-10-28 22:20:20 24 4
gpt4 key购买 nike

我有一个类,我想将对象作为字典取回,所以我在 __dict__() 中实现了这个。这是正确的吗?

我想一旦我这样做了,我就可以使用 dict(自定义对象),并将对象作为字典取回,但这不起作用。

你应该重写 __dict__() 吗?如何使用 dict() 将自定义对象转换为字典?

最佳答案

__dict__ 不是 Python 对象的特殊方法。用于属性字典; dict() 从不使用它。

相反,您可以支持迭代;当 dict() 被传递一个 iterable生成键值对,生成一个包含这些键值对的新字典对象。

您可以通过实现 __iter__ 方法来提供可迭代对象,该方法应返回 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 abstract class , 并且 dict() 将识别其中一个并将键和值复制到新的字典对象。这需要做更多的工作,但如果您希望自定义类在其他任何地方也能像映射一样发挥作用,那么这可能是值得的。

关于python - 在 python 类上覆盖 __dict__(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23252370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com