오버로드 된 비교 연산자가있는 int 파생 클래스가 있습니다.오버로드 된 비교 연산자를 사용하여 int 파생 클래스에서 원본 int 비교에 액세스
오버로드 된 메서드 본문에서는 원래 연산자를 사용해야합니다.
장난감 예 :
>>> class Derived(int):
... def __eq__(self, other):
... return super(Derived, self).__eq__(other)
파이썬 3.3 이상으로 잘 작동하지만 예외 AttributeError: 'super' object has no attribute '__eq__'
파이썬 2.7와 함께 실패합니다.
:
return int(self) == other
그냥 비교하는 새로운 int
객체의 생성을 필요로
try:
return super(Derived, self).__eq__(other)
except AttributeError:
return super(Derived, self).__cmp__(other) == 0
기반 제어 흐름을 분리하면서 파이썬 버전에서, 나는 끔찍한 지저분한 발견 (그래서 파이썬 버전을 명시 적으로 검사하고있다).
Python 2.7 및 3.3+을 사용하여 우아한 방식으로 원래 정수 비교에 액세스하려면 어떻게해야합니까?
당신은 액세스 할 수있는''슈퍼 .__ eq__'를 통해 방법을 비교 int'. 그러나, 파이썬 버전에 따라 메소드를 비교하는 빌트인 타입은 많이 다르다. 그러므로 python2는'super.eq'는 1 개의 인자가 필요하고 python3은 2가 필요합니다. – infotoni91
'int (self) == int (other)'를 너무 지저분하다고 생각합니까? – Phillip
@Phillip 그것은'int (self) == other'보다 하나 더 많은 객체를 만듭니다. – abukaj