__eq__ и __ne__ при сравнении объектов разных типов:
  isinstance.NotImplemented.  Это позволяет Python'у попытаться вызвать __eq__ у другого объекта.__ne__ как инверсию __eq__: return not (self == other). Это обеспечивает консистентность.
class MyClass:
    def __init__(self, value):
        self.value = value
    def __eq__(self, other):
        if isinstance(other, MyClass):
            return self.value == other.value
        return NotImplemented
    def __ne__(self, other):
        return not (self == other)
  
Для реализации гибких методов __eq__ (равенство) и __ne__ (неравенство) в Python, особенно при работе с разными типами объектов, важно учитывать следующие аспекты:
Проверка типа операнда: Прежде чем сравнивать атрибуты объектов, необходимо убедиться, что сравниваемый объект имеет сопоставимый тип.  Использовать isinstance() для проверки типа - хороший способ.
Обработка случаев несравниваемых типов: Если типы объектов не сравнимы, лучше всего возвращать NotImplemented.  Это позволяет Python попробовать вызвать метод __eq__ или __ne__ на другом объекте (справа от оператора).  Если и это не даст результата, Python вернёт обычное False (для __eq__) или True (для __ne__).
Учет возможных исключений:  В некоторых случаях, сравнение атрибутов может вызывать исключения.  Рекомендуется заключать код сравнения в блок try...except и возвращать NotImplemented при возникновении исключения. Это обеспечивает более отказоустойчивое поведение.
Реализация __ne__ через __eq__:  Метод __ne__ можно эффективно реализовать, просто инвертировав результат __eq__.  Это упрощает код и обеспечивает консистентность сравнений.  Однако, помните, что если __eq__ возвращает NotImplemented, то __ne__ тоже должен вернуть NotImplemented.
Пример реализации:
class MyObject:
    def __init__(self, value):
        self.value = value
    def __eq__(self, other):
        if isinstance(other, MyObject):
            return self.value == other.value
        elif isinstance(other, int): # Например, сравнение с int
            return self.value == other
        else:
            return NotImplemented # Очень важно
    def __ne__(self, other):
        result = self.__eq__(other)
        if result is NotImplemented:
            return NotImplemented
        return not result
Пояснения к примеру:
__eq__: Сначала проверяется тип объекта other. Если это экземпляр MyObject, сравниваются значения self.value и other.value. Если это целое число (int), происходит сравнение с ним. Если тип не поддерживается, возвращается NotImplemented.__ne__:  Использует результат __eq__. Если __eq__ вернул NotImplemented, __ne__ тоже должен вернуть NotImplemented.  В противном случае возвращается инвертированный результат __eq__.Важно: Всегда стремитесь к логичной и предсказуемой семантике сравнений. Четко определяйте, какие типы объектов должны быть сравнимы и какие правила сравнения применяются.