본문 바로가기
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로 구성된다.

  • 일반적으로 list, tuple, set, dict, dict 만을 각기 배우는 경우로 출발하지만,
  • OOP의 관점에서 살펴보기 위해서는 collections.abc 에 속하는 다양한 abstract classes의 hierarcy를 이해해야 한다.

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

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

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을 모두 상속한 class로 Python에서 가장 많이 사용되는 Sequence(list and tuple, bytes and bytesarray), Set(setfrozenset) 및 Mapping (dict) 가 모두 이를 상속하고 있음.

Sequence

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

  • mutable 로는 listbytesarray
  • immutalbe 로는 tuplebytes

Set

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

  • mutable 로는 set
  • immutable 로는 frozenset

Mapping

순서에 해당하는 index 대신에 key를 사용하여 각 item에 접근하는 Collection. 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

 

728x90