J'ai une classe dérivée int avec un opérateur de comparaison surchargé.Accès à la comparaison int originale à partir de la classe dérivée int avec opérateur de comparaison surchargé
Dans le corps des méthodes surchargées, j'ai besoin d'utiliser l'opérateur d'origine.
L'exemple de jouet:
>>> class Derived(int):
... def __eq__(self, other):
... return super(Derived, self).__eq__(other)
fonctionne très bien avec Python 3.3+, mais échoue avec Python 2.7 à l'exception AttributeError: 'super' object has no attribute '__eq__'
.
Je peux penser à plusieurs walkarrounds, que je trouve pas très propre:
return int(self) == other
nécessite la création d'un nouvel objet int
juste pour comparer, tandis que
try:
return super(Derived, self).__eq__(other)
except AttributeError:
return super(Derived, self).__cmp__(other) == 0
divise le flux de contrôle à base sur la version Python, que je trouve terriblement en désordre (donc inspecte la version Python explicitement).
Comment puis-je accéder à la comparaison de nombres entiers d'une manière élégante en travaillant avec Python 2.7 et 3.3+?
Vous pouvez accéder à la 'int' méthode de comparaison via' super .__ eq__'. Cependant, en fonction de la version python, les méthodes de comparaison sont très différentes. Par conséquent python2 'super.eq' nécessite 1 argument (autre) alors que python3 requiert 2 (self et autre) – infotoni91
Considérez-vous int (self) == int (other)' too much? – Phillip
@Phillip crée un objet de plus que int (self) == other' – abukaj