19 lines
657 B
Python
19 lines
657 B
Python
from types import SimpleNamespace
|
|
from collections.abc import Mapping
|
|
|
|
|
|
class DictToObj:
|
|
def __new__(cls, x):
|
|
# dict (ou Mapping): vira SimpleNamespace com conversão recursiva
|
|
if isinstance(x, Mapping):
|
|
return SimpleNamespace(**{k: cls(v) for k, v in x.items()})
|
|
# listas: converte cada item
|
|
if isinstance(x, list):
|
|
return [cls(i) for i in x]
|
|
# (opcional) outras coleções comuns
|
|
if isinstance(x, tuple):
|
|
return tuple(cls(i) for i in x)
|
|
if isinstance(x, set):
|
|
return {cls(i) for i in x}
|
|
# primitivos: retornam como estão
|
|
return x
|