표준 라이브러리의 ABC

매일 공부(ML)·2023년 2월 1일
0

Fluent Python

목록 보기
77/130

객체지향 상용구

인터페이스: 프로토콜에서 ABC까지

표준 라이브러리의 ABC

파이썬 2.6이후 표준 라이브러리에 ABC가 포함된 것으로, numbers와 io 패키지에서도 볼 수 있지만, 대부분의 ABC는 collection.abc 모듈에 정의되어 있으며, 이 모듈에 정의된 ABC들이 가장 많이 사용됩니다.


collection.abc의 ABC

파이썬 3.4버전의 collections.abc에 정의된 16개의 ABC를 속성명을 생략하고 간략히 UML 클래스 다이어그램으로 보여주고. collection.abc 공식 문서는 ABC 클래스들 간의 관계, 추상 및 구상 메서드를 표 형태로 요약해서 잘 설명하고 있디. (지금은 ABC에선 일반적으로 다중 상속이 문제되진 않는다.)


iterable, Container, Sized

모든 컬렉션은 이 ABC를 상속하거나, 적어도 호환되는 프로토콜을 구현하고, Iterable은 iter()를 통해 반복은, Container는 contains()를 통해서 in 연산자를, Sized는 len()을 통해서 len()메서드를 지원한다.

Sequence, Mapping, Set

주요 불변 컬렉션형으로서, 각기 가변형 서브클래스가 있다.

Mapping View

파이썬 3에서 items(), keys(), values() 메서드에서 반환된 객체는 각기 ItemsView, KeysView, ValuesView를 상속하고, ItemsView와 ValuesView는 풍부한 인터페이스를 제공하는 Set을 상속한다.

Callable, Hashable

아 두 ABC는 컬렉션과 밀접한 연관이 있는 것은 아니지만, collections.abc가 파이썬 표준 라이브러리 안에서 ABC를 정의한 최초의 패키지며, 이 두 묘듈은 여기에 포함시킬 가치가 있다고 생각했고, Callable이나 Hashable의 서브클래스는 본 적이 없으므로, 이 두 클래스는 주로 어떤 객체를 호출하거나 해시할 수 있는지 안전하게 판단하기 위해 isinstance()함수와 함께 사용된다.

Iterator

Iterator는 Iterable을 상속한다.


ABC의 숫자탑

numbers 패키지는 숫자탑이라거 하는 것을 정의하는데 Number가 최상위 슈퍼클래스며, 그 밑에 Complex, 그리고 계속해서 Integral까지 내려간다.

  • number, Complex, Real, Rational, Integral

정수형인지 검사해야 하는 경우 Isinstance(x, numbers.Integral)을 이용해서 int형, bool형, 또는 자신을 numbers ABC에 등록한 정수형을 받을 수 있고 언제든 클래스를 numbers.Integral의 가상 서브 클래스로 등록하면, 해당 클래스의 객체가 isinstance(x,numbers.Integral) 검사를 통과할 수 있다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글