У меня есть класс, производный от 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__'
.
Я могу вспомнить несколько обходных путей, которые показались мне не очень чистыми:
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
черезsuper.__eq__
. Однако в зависимости от версии Python методы сравнения встроенных типов реализуются сильно по-разному. Поэтому python2super.eq
требует 1 аргумент (другой), тогда как python3 требует 2 (я и другой) - person infotoni91   schedule 01.12.2016int(self) == int(other)
слишком грязным? - person Phillip   schedule 01.12.2016int(self) == other
- person abukaj   schedule 01.12.2016