From a16857529ec905eebf26ac5c2e6f58083d73247d Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Thu, 25 Jul 2024 16:50:24 -0700 Subject: [PATCH] StructurePrintMixin: Print inherited fields --- xbe/__init__.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/xbe/__init__.py b/xbe/__init__.py index 861c06b..f8e518f 100644 --- a/xbe/__init__.py +++ b/xbe/__init__.py @@ -451,7 +451,7 @@ class StructurePrintMixin: A simple mixin to __repr__ ctypes structures """ - _fields_: Sequence[Union[Tuple[str, Any], Tuple[str, Any, int]]] + _fields_: List[Union[Tuple[str, Any], Tuple[str, Any, int]]] def __repr__(self) -> str: return self.dumps() @@ -461,8 +461,14 @@ def dumps(self, indent: int = 0) -> str: Pretty-print all fields and values of the structure, return a string """ s = "" - max_name_len = max(len(item[0]) for item in self._fields_) - for item in self._fields_: + + fields: List[Union[Tuple[str, Any], Tuple[str, Any, int]]] = [] + for cls in self.__class__.mro(): + if issubclass(cls, StructurePrintMixin) and hasattr(cls, "_fields_"): + fields.extend(cls._fields_) + + max_name_len = max(len(item[0]) for item in fields) + for item in fields: fname, ftype = item[0], item[1] fval = getattr(self, fname) s += " " * indent + ("%s: " % fname).ljust(max_name_len + 2)