Generally doing stuff with `self.__dict__` is kind of dangerous - in this case, we're just reading, but it would pick up any attribute assigned to it, not necessarily just the ones in the `__init__`.  Perhaps it'd be more explicit and also safer to manually construct a dictionary from safe, known-good values?