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

如何将带有插槽的python类转换为字典?

如何将带有插槽的python类转换为字典?

在字典理解中使用__slots__属性plusgetattr()

{s: getattr(obj, s) for s in obj.__slots__ if hasattr(obj, s)}

跳过所有未设置的属性

或者,将缺少的属性设置为None

{s: getattr(obj, s, None) for s in obj.__slots__}

演示:

>>> class Foo(object):
...     __slots__ = ('bar', 'spam')
... 
>>> obj = Foo()
>>> obj.bar = 42
>>> {s: getattr(obj, s) for s in obj.__slots__ if hasattr(obj, s)}
{'bar': 42}
>>> {s: getattr(obj, s, None) for s in obj.__slots__}
{'spam': None, 'bar': 42}

您甚至可以将其设为该类的属性vars()并将使用它:

>>> class Foo(object):
...     __slots__ = ('bar', 'spam')
...     @property
...     def __dict__(self):
...         return {s: getattr(self, s) for s in self.__slots__ if hasattr(self, s)}
... 
>>> f = Foo()
>>> f.bar = 42
>>> f.__dict__
{'bar': 42}
>>> f.spam = 'eggs'
>>> f.__dict__
{'spam': 'eggs', 'bar': 42}
>>> vars(f)
{'spam': 'eggs', 'bar': 42}
>>> f.hello = 'world'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute 'hello'
python 2022/1/1 18:37:21 有388人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

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

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

请先登录

推荐问题


联系我
置顶