본문 바로가기
Python/Fluent Python

[Chapter 1] 파이썬 데이터 모델

by 잼있는잼니 2023. 9. 19.

Fluent Python을 읽고, 도움이 된 부분을 위주로 작성할 것!


이번 Chapter 1은 파이썬 데이터 모델에 대해서 말하고 있다.

여기서 데이터 모델은 파이썬 레퍼런스에서의 데이터 모델을 말한다.

 

레퍼런스를 약간 인용하자면, 모든 객체는 아이덴티티(identity), 형(type), 값(value)를 가진다.

아이덴티티(identity)는 메모리상에서의 객체의 주소

형(type)은 객체가 가질 수 있는 값들(string, integer,float 등)

값(value)은 가변이나 불변으로 존재


데이터 모델을 일종의 파이썬의 프레임워크로 설명할 수 있고, sequences, functions, iterators, coroutines, classes, context managers같은 언어 자체 building blocks의 인터페이스로 정의 할 수 있다. 

 

파이썬의 장점 중 하나를 일관성으로 두며, len()과 같은 내장 함수를 사용자가 만든 객체에서도 magic method를 구현해 사용할 수 있다.

 

import collections

Card = collections.namedtuple('Card', ['rank', 'suit'])

class FrenchDeck:
  ranks = [str(n) for n in range(2, 11)] + list('JQKA')
  suits = 'spades diamonds clubs hearts'.split()
  def __init__(self):
    self._cards = [Card(rank, suit) for suit in self.suits
                   for rank in self.ranks]
  def __len__(self):
    return len(self._cards)
  def __getitem__(self, position):
    return self._cards[position]

deck = FrenchDeck()

FrenchDeck에서 __getitem__과 __len__ 을 이용해 다양한 것을 얻을 수 있음을 보여준다.

# len 메서드 사용
len(deck)
52

# 카드 위치 확인
deck[-1]
Card(rank='A', suit='hearts')

# 함수 구현 없이 내부 메서드를 이용할 수 있음
from random import choice
choice(deck)
Card(rank='3', suit='clubs')

__getitem__을 구현해서 iterator나 in 을 사용할 수 도 있다.

 


 

파이썬에서 특수 메서드를 구현함으로써 정의한 객체가 내장 객체처럼 동작이 가능하며, Pythonic 하다는 코딩 스타일을 구현할 수 있다.

어렵다고 생각한 파이썬스럽게 코딩을 하기에 이렇게 간단하게 시작을 해본다!


 

https://docs.python.org/ko/3/reference/datamodel.html

 

 

댓글