Khi tôi sử dụng mã trong Python 2 nó hoạt động tốt trong khi Python 3 nó mang lại cho tôi những lỗipython 2 và 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
>>>
........................................ ...........................
Trong python 3, lỗi này xuất hiện trên and
khi chỉ hoạt động với ==
và !=
.
Vui lòng đề xuất giải pháp.
Các PEP 8 khuyến cáo là cung cấp tất cả sáu so sánh phong phú. Để dễ dàng hơn, hãy sử dụng * functools.total_ordering *. –
làm cách nào để sử dụng __lt và__eq__ thay cho __cmp__? –
Vâng, 'lt' là viết tắt của Less Than. Nó trả về một giá trị boolean cho biết liệu 'self' có nhỏ hơn tham số khác không. Những người khác làm việc tương tự. Tôi chắc rằng bạn có thể tìm ra các chi tiết. –