Ответ 1
Это хорошо объясняется в описании 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__
Это дает следующие преимущества перед пустым классом:
- Он позволяет инициализировать атрибуты при построении объекта:
sn = SimpleNamespace(a=1, b=2)
- Он предоставляет читаемый
repr()
:eval(repr(sn)) == sn
- Он отменяет сравнение по умолчанию. Вместо сравнения
id()
вместо этого сравниваются значения атрибутов.