Kiedy użyć kodu w Pythonie 2 działa dobrze podczas Pythonie 3 to daje mi błądPython 2 i Python 3 __cmp__
class point:
def __init__(self,x,y):
self.x=x
self.y=y
def dispc(self):
return ('(' +str(self.x)+','+str(self.y)+')')
def __cmp__(self,other):
return ((self.x > other.x) and (self.y > other.y))
............... .................................................. ...
[email protected]:~/Documents/Programs$ python3 -i classes.py
>>> p=point(2,3)
>>> q=point(3,4)
>>> p>q
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: point() > point()
>>>
[email protected]:~/Documents/Programs$ python -i classes.py
>>> p=point(2,3)
>>> q=point(3,4)
>>> p>q
False
>>>
........................................ ...........................
W python 3 daje błąd na and
, a działa tylko dla ==
i !=
.
Proszę zaproponować rozwiązanie.
PEP 8 zalecenie jest dostarczenie wszystkich sześciu bogatych porównań. Aby to ułatwić, użyj * functools.total_ordering *. –
Jak używać __lt i__eq__ zamiast __cmp__? –
Cóż, 'lt' oznacza mniej niż. Zwraca wartość logiczną wskazującą, czy 'self' jest mniejsze niż drugi parametr. Pozostałe działają podobnie. Jestem pewien, że potrafisz ustalić szczegóły. –