반응형
다음 코드
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))
Python 2에서는 잘 작동하지만 Python 3에서는 오류가 발생합니다.
>>> 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()
==
및 ! =
에서만 작동합니다.
해결 방법
__ cmp __
는 더 이상 사용되지 않습니다 .
보다 구체적으로, __ lt __
는 self
및 other
를 인수로 취하며 self
가 기타
. 예를 들면 :
class Point(object):
...
def __lt__(self, other):
return ((self.x < other.x) and (self.y < other.y))
(이것은 현명한 비교 구현은 아니지만 원하는 것을 말하기는 어렵습니다.)
따라서 다음과 같은 상황이 발생하면 :
p1 = Point(1, 2)
p2 = Point(3, 4)
p1 < p2
이것은 다음과 동일합니다.
p1.__lt__(p2)
True
를 반환합니다.
__ eq __
는 포인트가 같으면 True
를 반환하고 그렇지 않으면 False
를 반환합니다. 다른 방법도 유사하게 작동합니다.
from functools import total_ordering
@total_ordering
class Point(object):
def __lt__(self, other):
...
def __eq__(self, other):
...
참조 페이지 https://stackoverflow.com/questions/8276983
반응형
'파이썬' 카테고리의 다른 글
파이썬 문자열에서 모든 공백 제거 (0) | 2020.09.23 |
---|---|
파이썬에서 사용 가능한 모든 드라이브 문자를 나열하는 방법이 있습니까? (0) | 2020.09.23 |
파이썬으로 커브 피팅 (0) | 2020.09.23 |
파이썬 쉘과 언어에 구애받지 않는 방식으로 명령 줄에서 현재 Linux 프로세스 ID를 얻는 방법 (0) | 2020.09.23 |
파이썬 문자열 목록에서 문자 제거 (0) | 2020.09.23 |
댓글