作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含两个字段的对象,我希望能够将其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/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!