Всем привет.
Делаю небольшую прогу на PyQt5, так она выглядит на текущий момент:

Застрял на этапе создания виджетов для вкладок QTabWidget.
Если вручную указать, что для открытия файлов формата xml используется класс XML, то все работает нормально, но интересно реализовать класс, который самостоятельно выбирает нужный класс-наследник, исходя из расширения файла.

Сам класс:
 class WidgetHandler:
    def __new__(cls, path, parent=None):
        ext = os.path.splitext(path)[1].replace('.', '')
        for subclass in cls.__subclasses__():
            if subclass.__name__.lower() == ext:
                return super().__new__(subclass)
        raise NotImplementedError
    def __init__(self, parent, path):
        self._path = path
        self._parent = parent
        self._is_modified = False  # Флаг для проверки был ли изменен файл
        self._create()
    def _create(self):
        raise NotImplementedError
    def _save(self):
        raise NotImplementedError
    def _close(self):
        raise NotImplementedError
    def save(self) -> None:
        if self._is_modified:
            self._save()
            self._is_modified = False
    def close(self) -> None:
        if self._is_modified:
            pass  # TODO Запрос сохранения
        self._close()

Его наследник:
 class XML(WidgetHandler, QTreeView):
    def _create(self):
        self.setParent(self._parent)
        model = DomModel(self._path)
        # model.dataChanged.connect(lambda: print('Data Changed'))
        self.setModel(model)
        self.expandAll()
        self.setRootIsDecorated(False)
        self.setItemsExpandable(False)
        delegate = XMLDelegate()
        self.setItemDelegate(delegate)
    def _save(self):
        pass
    def _close(self):
        pass
Но в результате вместо виджета получаю ошибку: “object.__new__(XML) is not safe, use QTreeView.__new__()”
Подскажите, пожалуйста, где я ошибся.