Memo

Chapter 1 파이썬 데이터 모델

1.2 파이썬다운 카드 한 벌

표준 라이브러리만 알면 일괄적으로 쓸 수 있다.

len , random.choice 등 …

__getitem__() 메서드를 만들면 속성 접근, 슬라이싱, 뿐 아니라 반복까지도 가능해진다.

getitem, len 둘 다 정의되지 않은 경우

# 매직 메서드 구현이 안되어있는 경우 당연할 것 같은 동작이 당연히 안됨.

>>> from cards import *
>>> deck = FrenchDeck()

# 길이
>>> len(deck)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'FrenchDeck' has no len()

# 속성 접근
>>> deck[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'FrenchDeck' object is not subscriptable

# 슬라이싱
>>> deck[:3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'FrenchDeck' object is not subscriptable

# 반복
>>> for card in deck:
...     print(card)
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'FrenchDeck' object is not iterable

# 뒤집기
>>> reversed(deck)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'FrenchDeck' object is not reversible

# in 연산자
>>> Card('Q', 'hearts') in deck
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument of type 'FrenchDeck' is not iterable

# 정렬
>>> sorted(deck)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'FrenchDeck' object is not iterable

getitem은 정의되었지만, len은 정의되지 않은 경우