프로토콜과 덕 타이핑

매일 공부(ML)·2023년 1월 18일
0

Fluent Python

목록 보기
67/130

4부 객체 지향 상용구

시퀀스,해킹,해시,슬라이스

프로토콜과 덕 타이핑

프로토콜은 객체지향 프로그래밍에서 프로토콜은 문서에만 정의되어 있고 실제 코드엔 정의되지 않은 비공식 인터페이스이다.

예를 들어, 파이썬의 시퀀스 프로토콜은 len()과 getitem() 메서드를 동반하여 표준 시그니처와 의미에 따라서 이 메서드들을 구현하는 어떠한 클래스도 시퀀스가 필요한 곳에 사용될 수 있고, 그 클래스의 슈퍼 클래스가 무엇인지는 중요하지 않고 단지 필요한 메서드만 제공하면 된다.

import collections

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

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

FrenchDeck 클래스는 시퀀스 프로토콜을 구현하므로 파이썬에서 제공하는 여러 기능을 활용할 수 있고, 코드 어디에서나 시퀀스 프로토콜을 따르는 정의가 없으므로 이 클래스가 object를 상속하고 있지만 파이썬 경험이 있는 프로그래머들은 코드를 본 후 시퀀스처럼 동작하므로 시권스라는 것을 알 수 있다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글