Anton Abrosimov <abrosimov....@gmail.com> added the comment:
An alternative way: from collections.abc import Mapping from dataclasses import dataclass, fields, _FIELDS, _FIELD class DataclassMappingMixin(Mapping): def __iter__(self): return (f.name for f in fields(self)) def __getitem__(self, key): field = getattr(self, _FIELDS)[key] if field._field_type is not _FIELD: raise KeyError(f"'{key}' is not a dataclass field.") return getattr(self, field.name) def __len__(self): return len(fields(self)) @dataclass class MyDataclass(DataclassMappingMixin): a: int = 1 b: int = 2 my_dataclass = MyDataclass(a='3') print(my_dataclass.__class__.__mro__) print(my_dataclass.__class__.__name__) print(my_dataclass['a']) print(my_dataclass['b']) print(dict(my_dataclass)) print(dict(**my_dataclass)) print(fields(my_dataclass)) Result: (<class '__main__.MyDataclass'>, <class '__main__.DataclassMappingMixin'>, <class 'collections.abc.Mapping'>, <class 'collections.abc.Collection'>, <class 'collections.abc.Sized'>, <class 'collections.abc.Iterable'>, <class 'collections.abc.Container'>, <class 'object'>) MyDataclass 3 2 {'a': '3', 'b': 2} {'a': '3', 'b': 2} (Field(name='a',type=<class 'int'>, ...), Field(name='b',type=<class 'int'>, ...)) ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue42742> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com