Any reason these are public? Switch to non-public if not (leading underscore self._on_type_changed).