У меня есть int-производный класс с перегруженным оператором сравнения.Доступ к исходному int-сравнению из int-производного класса с перегруженным оператором сравнения
В теле перегруженных методов мне нужно использовать оригинальный оператор.
Игрушка пример:
>>> class Derived(int):
... def __eq__(self, other):
... return super(Derived, self).__eq__(other)
отлично работает с Python 3.3+, но терпит неудачу с Python 2.7, за исключением AttributeError: 'super' object has no attribute '__eq__'
.
Я могу думать о нескольких walkarrounds, которые я не нашел очень чистый:
return int(self) == other
требует создания нового int
объекта просто сравнить его, в то время как
try:
return super(Derived, self).__eq__(other)
except AttributeError:
return super(Derived, self).__cmp__(other) == 0
разделяет поток управления на основе на версию Python, которую я нахожу ужасно грязной (так что явным образом проверяю версию Python).
Как я могу получить доступ к первоначальному целочисленному сравнению элегантным способом работы с Python 2.7 и 3.3+?
Вы можете получить доступ к 'int' сравнивая метод с помощью' супер .__ eq__'. Тем не менее, в зависимости от встроенных методов сравнения типов python реализованы разные методы. Поэтому python2 'super.eq' требует 1 аргумент (другой), тогда как python3 требует 2 (self и other) – infotoni91
Вы считаете, что' int (self) == int (other) 'слишком беспорядочно? – Phillip
@Phillip создает еще один объект, чем 'int (self) == other' – abukaj