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
(set
과 frozenset
) 및
3. Mapping
(dict
) 가
모두 이를 상속하고 있음.
Sequence **
정수(int
)를 index
로 하여 item이 위치한 위치를 통해 접근(__getitem__(idx)
)이 가능한 type을 위한 abstract class.
이는 item의 순서가 의미를 가짐을 의미함.
- mutable 로는
list
와bytesarray
- immutalbe 로는
tuple
와bytes
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
https://dsaint31.tistory.com/501
https://dsaint31.tistory.com/569
https://dsaint31.tistory.com/679
'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 |