Python 3.3+typesпонятие
types.SimpleNamespace
пространства имён
Простой объект-контейнер: атрибуты задаются при создании или потом, через точку. Удобен вместо словаря, когда хочется писать obj.x, а не d['x'].
Синтаксис
types.SimpleNamespace(**kwargs)
В отличие от namedtuple и dataclass, у SimpleNamespace нет фиксированного набора полей: атрибуты можно добавлять и удалять, а перебирать его нельзя. Два объекта равны, если равны их атрибуты, — но поэтому они и не хешируются. vars(ns) отдаёт внутренний словарь. Частый приём — json.loads(..., object_hook=lambda d: SimpleNamespace(**d)), чтобы читать JSON через точку.
Примеры
from types import SimpleNamespace
p = SimpleNamespace(x=1, y=2)
p.z = 3
print(p) # → namespace(x=1, y=2, z=3)
print(p == SimpleNamespace(x=1, y=2, z=3)) # → True
import json
from types import SimpleNamespace
data = json.loads('{"user": {"name": "Ann"}}',
object_hook=lambda d: SimpleNamespace(**d))
print(data.user.name) # → Ann
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности