Posiadam klasę pochodną z operatorem porównania przeciążenia.Uzyskiwanie dostępu do oryginalnego porównania int z klasy pochodnej pochodzącej z przeciążonego operatora porównania
W ciele przeciążonych metod muszę użyć oryginalnego operatora.
Przykład zabawki:
>>> class Derived(int):
... def __eq__(self, other):
... return super(Derived, self).__eq__(other)
współpracuje z Pythonie 3.3+, ale nie Pythona 2,7 z wyjątkiem AttributeError: 'super' object has no attribute '__eq__'
.
mogę myśleć o kilku walkarrounds, które nie znajdując bardzo czysty:
return int(self) == other
wymaga stworzenia nowej int
obiektu po prostu go porównać, a
try:
return super(Derived, self).__eq__(other)
except AttributeError:
return super(Derived, self).__cmp__(other) == 0
dzieli przepływ sterowania w oparciu w wersji Pythona, którą uważam za strasznie niechlujną (tak samo dokładnie sprawdzam wersję Pythona).
Jak uzyskać dostęp do oryginalnego porównania liczb całkowitych w elegancki sposób, pracując z Pythonem w wersji 2.7 i 3.3+?
można uzyskać dostęp do 'int' porównując metodę poprzez' Super .__ eq__'. Jednak w zależności od wersji wbudowanej w pythona typy metod porównywania są zaimplementowane znacznie inaczej. Dlatego python2 'super.eq' wymaga 1 argumentu (innego), podczas gdy python3 wymaga 2 (siebie i innych) – infotoni91
Czy uważasz, że' int (self) == int (other) 'too messy? – Phillip
@Phillip tworzy jeszcze jeden obiekt niż 'int (self) == other' – abukaj