__class__ проверка на равенство из двух разных импортов - PullRequest
0 голосов
/ 01 сентября 2018

У меня довольно сложная настройка импорта в моем программном проекте на Python, где я не могу импортировать некоторые модули динамически с помощью importlib. Поэтому я сталкиваюсь с ситуациями, когда у меня есть два объекта одного и того же класса, но так как они были загружены независимо, проверка на равенство между ними дает мне False.

Их строковые представления obj.__class__ каждого объекта выглядят одинаково: <class 'drivers.MongoDriver'> против <class 'drivers.MongoDriver'>. Проверка на равенство с __eq__ в обоих классах, issubclass, __eq__ в type() и isinstance завершились неудачей.

Я мог бы подумать о хакерском способе по-прежнему проверять равенство, сравнивая repr(obj.__class__), но на самом деле это не так уж приятно. Другим решением будет «скрыть» атрибут, указывающий некоторый уникальный идентификатор класса.

Есть ли другой (лучший) способ как проверять равенство между двумя классами, которые по сути одинаковы, но были загружены importlib независимо?

Edit: Важно: я не ищу способ избежать импорта класса дважды. Некоторые модули моего проекта специально динамически импортируются для учета изменений кода в этих модулях во время выполнения. Затем эти модули снова импортируют другие модули, такие как драйвер, с которым я хочу проверить равенство. И хотя было бы неплохо не импортировать те неизменяемые модули, которые используются изменяющимися модулями, я осознаю, что всякий раз, когда я динамически импортирую один модуль, все зависимости затем снова импортируются. (Если у вас есть решение о том, как повторно импортировать модуль A, который сам имеет (статический) импорт B, но не должен повторно импортировать B вместе с A, я был бы счастлив. Но это не то, что я прямо спрашиваю / ищу для.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...