__eq__
메소드를 만들고자하는 컬렉션 클래스에서 작업하고 있습니다. 그것은 내가 생각했던 것보다 더 미묘한 것으로 밝혀졌고 빌트인 컬렉션 클래스가 어떻게 작동하는지에 관해서 몇 가지 복잡한 점을 발견했습니다.컬렉션 클래스에 대한 __eq__ 메서드의 좋은 예는 무엇입니까?
나를 가장 도와주는 것이 좋은 예입니다. 표준 라이브러리 나 타사 라이브러리에서 순수 파이썬 구현이 __eq__
방법으로 있습니까?
__eq__
메소드를 만들고자하는 컬렉션 클래스에서 작업하고 있습니다. 그것은 내가 생각했던 것보다 더 미묘한 것으로 밝혀졌고 빌트인 컬렉션 클래스가 어떻게 작동하는지에 관해서 몇 가지 복잡한 점을 발견했습니다.컬렉션 클래스에 대한 __eq__ 메서드의 좋은 예는 무엇입니까?
나를 가장 도와주는 것이 좋은 예입니다. 표준 라이브러리 나 타사 라이브러리에서 순수 파이썬 구현이 __eq__
방법으로 있습니까?
"collections.py"를 살펴보십시오. 최신 버전 (버전 제어에서)은 __eq__을 사용하여 OrderedDict를 구현합니다. 또한 sets.py에 __eq__가 있습니다.
부품이 어렵습니다. 부품은 간단한 위임이어야합니다.
def __eq__(self, other):
if len(self) != len(other):
# Can we continue? If so, what rule applies? Pad shorter? Truncate longer?
else:
return all(self[i] == other[i] for i in range(len(self)))
시도해 보았습니다.하지만 여기에는 몇 가지 뉘앙스가 있습니다. 예를 들어, 다음은 False를 비교합니다 :'(1,2,3) == [1,2,3]'. 그래서 내가 모범 사례와 그 밖의 모든 것들에 대해 확실히 알고 있는지 예를 원했습니다. –
(1,2,3)은 다른 유형이므로 [1,2,3]과 동일하지 않습니다. 어떤 타입 강제 변환 규칙을 적용해야한다고 생각합니까? 그것은 꽤 복잡합니다. 그것은 "더 일반적인"유형입니까? –
집합과 같이 모든 컬렉션이 인덱싱 가능한 것은 아니며 같은 컬렉션에 동일한 순서로 항목이있을 것이라는 보장이 없습니다. – PaulMcG
고맙습니다. 나는 콜렉션이 C 언어로 구현되었다고 생각했다 ... –
파이썬 2.5와 2.6에서는 C 확장 모듈이다. 2.7에서 (버전 관리에서) 그것은 deque와 defaultdiect를 C 확장 모듈 _collections에서 가져 오는 파이썬 모듈입니다. OrderedDict는 3.1에서 새로 추가되었으며 2.7로 역 추적되었습니다. –