gpt4 book ai didi

python - 如何在Python中使用__slots__转储对象的所有字段

转载 作者:行者123 更新时间:2023-12-01 07:43:15 26 4
gpt4 key购买 nike

我有一个包含两个字段的对象,我希望能够将其str作为dict。我使用下面的代码来执行此操作。

class Foo:
def __init__(self, a, b):
self.a = a
self.b = b

def __str__(self):
return str(self.__dict__)

>>> str(Foo(1, 2))
"{'a': 1, 'b': 2}"

现在我想优化它并包含 __slots__。添加 __slots__ 会删除 __dict__

如何在使用 __slots__ 的同时获得与上面相同的结果

class Foo:
__slots__ = ('a', 'b')

def __init__(self, a, b):
self.a = a
self.b = b

def __str__(self):
return str(self.__dict__)

>>> str(Foo(1, 2))
AttributeError: 'Foo' object has no attribute '__dict__'

最佳答案

你可以这样做:

class Foo:
__slots__ = ('a', 'b')

def __init__(self, a, b):
self.a = a
self.b = b

def __str__(self):
return str({slot: getattr(self, slot) for slot in self.__slots__})

x = Foo(1,2)

str(x)
"{'a': 1, 'b': 2}"

不是最漂亮的,但是由于 __slots__ 会删除 dict 属性以节省内存,因此您可以通过获取每个属性来手动构造一个字典

关于python - 如何在Python中使用__slots__转储对象的所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56585621/

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