我有一个带有两个字段的对象,我希望能够while
作为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__
答案 0 :(得分:1)
您可以执行以下操作:
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
属性以节省内存,因此您可以通过获取每个属性来手动构建字典
答案 1 :(得分:0)
在接受的答案之上,您可以将__dict__
重新定义为属性。
class Foo:
__slots__ = ('a', 'b')
def __init__(self, a, b):
self.a = a
self.b = b
@property
def __dict__(self):
return {slot: getattr(self, slot) for slot in self.__slots__}
def __str__(self):
return str(self.__dict__)
x = Foo(1,2)
str(x)
"{'a': 1, 'b': 2}"