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
(set
과 frozenset
) 및 Mapping
(dict
) 가 모두 이를 상속하고 있음.
Sequence
정수(int
)를 index
로 하여 item이 위치한 위치를 통해 접근(__getitem__(idx)
)이 가능함. 이는 item의 순서가 의미를 가짐을 의미함.
- mutable 로는
list
와bytesarray
- immutalbe 로는
tuple
와bytes
Set
수학에서의 집합을 추상화한 것으로 자신의 item 인지 여부를 판별할 수 있으며, item간에 순서가 없음.
- mutable 로는
set
- immutable 로는
frozenset
Mapping
순서에 해당하는 index 대신에 key를 사용하여 각 item에 접근하는 Collection. key-value 쌍을 item으로 가짐.
- mutable 로는
dict
같이 읽어보면 좋은 자료들
2023.10.06 - [Pages] - [Python] Collections
https://dsaint31.tistory.com/501
'Python' 카테고리의 다른 글
[ML] Dataset: Wisconsin Breast Cancer Dataset (0) | 2024.05.18 |
---|---|
[DL] Dataset: Boston Housing Price (1) | 2024.04.18 |
[Python] class 만들기. (0) | 2024.04.14 |
[DL] Pandas 로 csv 읽기: read_csv (0) | 2024.04.13 |
[PyTorch] Custom Model 과 torch.nn.Module의 메서드들. (0) | 2024.04.12 |