순서 해킹, 해시, 슬라이스

1. 벡터 # 1 보자 Vector2d 호환

시퀀스 생성자를위한 가장 좋은 방법은 모든 내장과 같은 생성자의 반복 가능한 인수로 데이터를 취할 시퀀스 유형 않습니다이다.

예 10-2. vector_v1.py : vector2d_v1.py에서 파생 된

에서 배열 수입 배열
 수입 reprlib의
 수입 수학


클래스 벡터 :
    타입 코드 = ' D '

    데프  __init__ (자기, 구성 요소) :
        self._components = 배열 (self.typecode 부품)

    데프  __iter__ (자기) :
         리턴 ITER (self._components)   #은 반복, 우리는 self._components의 반복자를 반환 할 수 있도록합니다.

    데프  __repr__ (자기) :
        성분 = reprlib.repr (
            self._components)   # 사용 reprlib.repr는 () self._components의 제한된 길이 표현을 얻을 수 있습니다. 
        구성 성분 = [components.find ( ' [ ' ) - 1 ]
          ' 벡터 ({}) ' .format (성분)

    데프  __str__ (자동) :
         리턴 STR (튜플 (자체))

    DEF  __bytes__ (자기)
          (바이트 ([ORD (self.typecode)]) +
                바이트 (self._components))

    데프  __eq__ (자기, 기타) :
         반환 튜플 (자기) == 튜플 (기타)

    데프  __abs__ (자기) :
         리턴 math.sqrt (합 (X * X 에 대한 X  자기))   # 우리는 구성 요소 FO 제곱의 합과 그의 SQRT을 계산한다.

    데프  __bool__ (자기) :
         반환 부울 (ABS (자체))

    @classmethod
    데프 frombytes (CLS, 옥텟) :
        타입 코드 = CHR (옥텟 [0])
        memv = memoryview (옥텟 [1 :]). 캐스팅 (타입 코드)
         복귀 CLS (memv)


"" "
reprlib.repr 함수 출력의 길이를 제한하여 크거나 순환 구조의 안전 표현을 생성
문자열과 함께 컷을 표시하는 '...'.

에 repr () 역할 : 디버깅
"" "


# 예 10-1. init__ 및 벡터 .__ repr__ .__ 벡터의 시험 
"" "
>>> 벡터 ([3.1, 4.2])
벡터 ([3.1, 4.2])
>>> 벡터 ((3,4,5))
벡터 ([3.0, 4.0, 5.0])
>>> 벡터 (범위 (10))
벡터 ([0.0, 1.0, 2.0, 3.0, 4.0, ...])
"" "

 

2. 프로토콜 및 오리 타이핑

당신은 파이썬에서 완벽하게 작동 순서 유형을 작성하는 특별한 클래스에서 상속 할 필요가 없습니다; 당신은 순서 프로토콜을 이행 방법을 구현해야합니다.

객체 지향 프로그래밍의 컨텍스트에서 프로토콜은 문서가 아닌 코드에 정의 된 비공식적 인 인터페이스이다. 예를 들어, 파이썬에서 시퀀스 프로토콜은 단지 수반 __len____getitem__ 방법. 모든 클래스의 스팸  표준 서명과 의미에 구현하는 방법이 사용될 수 있음은 어디 순서가 예상된다. 여부 스팸이의 서브 클래스 또는 그 무관하다; 모든 문제는 필요한 방법을 제공하는 것입니다.

예 10-3. 코드 예 1-1에서, 편의를 위해 여기에 재현

수입 컬렉션

카드 = collections.namedtuple ( ' 카드 ' , [ ' 계급 ' , ' 소송 ' ])


클래스 FrenchDeck :
    랭크 = STR (N) 에 대한 N  범위 (2, 11)] +리스트 ( ' JQKA ' )
    정장 = ' 스페이드 다이아몬드 클럽 하트 ' .split ()

    데프  __init__ (자기) :
        self._cards = [카드 (순위, 소송) 에 대한 소송 에서 self.suits
                        에 대한 순위 self.ranks]

    데프  __len__ (자기) :
         리턴 렌 (self._cards)

    DEF  __getitem__ (자기 위치)
         복귀 self._cards [위치]

FrenchDeck은하지 어디서나 코드에서 선언 된 경우에도, 시퀀스 프로토콜을 구현합니다. 모든 경험 파이썬 코더는보고가 있음을 이해할 것 입니다 이 서브 클래스하더라도, 시퀀스 객체를 . 우리는 말씀 입니다 이 때문에 일련의 동작 처럼, 그것은 중요한 것입니다.

이것은로 알려졌다 오리 입력 .

프로토콜은 비공식적, 강제 때문에 당신은 클래스가 사용되는 특정 컨텍스트를 알고 있다면, 당신은 자주, 프로토콜의 한 부분을 구현 멀리 얻을 수 있습니다. 예를 들어, 단지 __getitem__이 필요, 반복을 지원하기 위해; __len__ 제공 할 필요가 없다.

 

 

 

 

 

종료...

 

추천

출처www.cnblogs.com/neozheng/p/12310116.html