from dataclasses import asdict, fields from typing import Any, Dict class DataClassBase: @classmethod def fromdict(cls, d: Dict[str, Any]): """Return a dataclass from a dict which may include unexpected keys.""" class_fields = {f.name for f in fields(cls)} return cls(**{k: v for k, v in d.items() if k in class_fields}) def asdict(self): """Return the fields of a dataclass instance as a new dictionary mapping field names to field values.""" return asdict(self)