gpt4 book ai didi

python - SimpleNamespace 和空类定义有什么区别?

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

以下方法似乎都适用。使用 types.SimpleNamespace 有什么好处(除了漂亮的 repr)?还是一样的?

>>> import types
>>> class Cls():
... pass
...
>>> foo = types.SimpleNamespace() # or foo = Cls()
>>> foo.bar = 42
>>> foo.bar
42
>>> del foo.bar
>>> foo.bar
AttributeError: 'types.SimpleNamespace' object has no attribute 'bar'

最佳答案

这在 types 中有很好的解释。模块说明。它向您显示 types.SimpleNamespace 大致相当于:

class SimpleNamespace:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)

def __repr__(self):
keys = sorted(self.__dict__)
items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
return "{}({})".format(type(self).__name__, ", ".join(items))

def __eq__(self, other):
return self.__dict__ == other.__dict__

与空类相比,这提供了以下优点:

  1. 它允许您在构造对象时初始化属性:sn = SimpleNamespace(a=1, b=2)
  2. 它提供了一个可读的repr():eval(repr(sn)) == sn
  3. 它会覆盖默认比较。它不是通过 id() 进行比较,而是比较属性值。

关于python - SimpleNamespace 和空类定义有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37161275/

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