본문 바로가기
Python

[Python] collections.abc

by ds31x 2024. 4. 15.

2023.10.06 - [Pages] - [Python] Collections

collections.abc 와 Python의 DataStructure.

Python의 Data structure는
실제적으로 collections.abc 라는 abstract base class (abc) mechanism를 통한 hierarchy로 구성된다: type은 module임.

  • 일반적으로 list, tuple, set, dict 를 각각 익히는 경우가 입문용 Python책에서 일반적이지만,
  • OOP의 관점에서 살펴보기 위해서는 collections.abc module에서 정의된 다양한 abstract classes의 hierarcy를 이해해야 한다.

Python's built-in collection types (or container types) 들은

  • 자료구조 타입의 class가 가져야 하는 기능들을 추상화한
  • collections.abc 모듈의 다양한 abstract base class를 상속하고
  • 여기에 고유의 기능을 포함하여 implementation하는 형식으로 구성된다.
더보기

참고로,

abstract class

인스턴스화할 수 없는 클래스로, 반드시 subclass(하위 클래스)에서 구현해야 하는 abstract method를 가지고 있음.

보통 이를 통해 코드의 일관성재사용성을 위해 사용됨:

Python에서는 abc.ABC 클래스를 상속하여 만들어지며, @abstractmethod 데코레이터를 와 @property 등을 통해 abstract method와 abstract property등을 구현함.


collections.abc 의 hierarchy

이를 PlantUML을 이용하여 UML (Unified Modeling Language)로 그린 자료가 있어서 첨부한다.
원본은 Sangmoon Oh님의 Just a class diagram for Python 3 collections abstract base classes 임.

위의 UML에서 기호는 다음과 같다.

  • 노란색 마름모
    • UML에서 protected에 해당하며,
    • Python에서 special methods들을 나타낸다
    • 참고로 protected는 자식 클래스와 본인은 접근가능하지만, 외부에서는 접근하지 않도록 처리하는 것이나
    • Python에서는 protected와 같은 접근지시자를 직접적으로 구현할 수 없음
  • 이탤릭체
    • abstract method를 의미하며,
    • 해당하는 method를 가지고 있는 abstract class를 상속한 경우 이를 꼭 구현해야만 실제로 사용되는 class임.
    • abstract method를 가지고 있는 경우, 여전히 abstract class임.
  • 녹색원
    • public 접근지시자를 의미함.
    • 외부에서도 접근할 수 있는 method임을 의미하며,
    • Python에서의 대부분의 일반적인 (instance) method가 이에 해당함

대표적인 Classes

Container

__contins__(x) : 포함 여부를 구분할 수 있는 메서드를 가진 abstract class.


Sized

__len__() : 자신이 포함하고 있는 item의 수를 반환하는 메서드를 가진 abstract class.


Iterable **

__iter__() : Iterator를 반환하는 메서드를 가진 abstract class로 자신이 가진 item을 순회(iteartion)을 할 수 있음을 추상화.


Collection **

Container, Sized, Iterable을 모두 상속한 abstract class
Python에서 가장 많이 사용되는

1. Sequence(list and tuple, bytes and bytesarray),

2. Set(setfrozenset) 및

3. Mapping (dict) 가

모두 이를 상속하고 있음.


Sequence **

정수(int)를 index 로 하여 item이 위치한 위치를 통해 접근(__getitem__(idx))이 가능한 type을 위한 abstract class.
이는 item의 순서가 의미를 가짐을 의미함.

  • mutable 로는 listbytesarray
  • immutalbe 로는 tuplebytes

Set **

수학에서의 집합을 추상화한 것으로 자신의 item 인지 여부를 판별할 수 있으며, item간에 순서가 없는 abstract class.

  • mutable 로는 set
  • immutable 로는 frozenset

Mapping **

순서에 해당하는 index 대신에 key를 사용하여 각 item에 접근하는 Collection (abstract class).
key-value 쌍을 item으로 가짐.

  • mutable 로는 dict

같이 읽어보면 좋은 자료들

2023.10.06 - [Pages] - [Python] Collections

 

[Python] Collections

list (sequence type) 2023.07.12 - [Python] - [Python] list (sequence type) : summary [Python] list (sequence type) : summary list는 ordered mutable collection으로, collection을 위한 python data type들 중 가장 많이 사용된다. C에서의 array

ds31x.tistory.com

 

https://dsaint31.tistory.com/501

 

[Python] Iterable and Iterator, plus Generator

Iterable for 문에서 in 뒤에 위치하여 iterate (반복, 순회)가 가능한 object를 가르킴. __iter__() 라는 special method를 구현하고 있으며, 이를 통해 자신에 대한 iterator object를 반환할 수 있음. __iter__() special

dsaint31.tistory.com

https://dsaint31.tistory.com/569

 

[Math] Sequence (수열) and Series (급수)

Sequence 수열, 열 이라고 불림. numbers나 objects 들이 순서를 가지고(ordered) 나열된 것을 가르킴. order(순서)가 의미를 가지며, (order가 다르기 때문에 )중복이 허용이 된다. 중복이 허용된다는 점과 순

dsaint31.tistory.com

https://dsaint31.tistory.com/679

 

[Math] Class: set and proper class (클래스와 집합)

Class, Proper Class, and SetClass집합론 (Zermelo-Fraenkel set theory)에서Class는 구별가능한 수학적인 객체 (distinctive object)의 collection을 의미함.(Set은 collection of distinctive objects라고 말할 수 있으나, 여기에 well-

dsaint31.tistory.com