파이썬의 큰 장점 중 하나는 일관성
pythonic 하다는 건 뭘까?
사용자 정의 객체같은 것을 만들려면 그에 해당하는 magic method를 구현해야 (남용하지 말것)
표준 라이브러리만 알면 일괄적으로 쓸 수 있다.
len
, random.choice
등 …
__getitem__()
메서드를 만들면 속성 접근, 슬라이싱, 뿐 아니라 반복까지도 가능해진다.
# 매직 메서드 구현이 안되어있는 경우 당연할 것 같은 동작이 당연히 안됨.
>>> 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