ABC상속하기

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

Fluent Python

목록 보기
76/130

객체지향 상용구

인터페이스: 프로토콜에서 ABC까지

ABC상속하기

Collections.MutableSequence활용하기

import collections

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

class FrenchDeck2(collections.MutableSequence):
	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]
        
    def __setitem__(self, position, value):
    	self._cards[position] = value
        
    def __delitem__(self, position):
    	del self._cards[position]
        
    def insert(self, position, value):
    	self._cards.insert(position, value)

파이썬은 모듈을 로딩하거나 컴파일할 때가 아니라 실행 도중 실제로 FrenchDeck2 객체를 생성할 때 추상 메서드의 구현 여부를 확인하여 추상 메서드 중 하나라도 구현되어 있지 않으면 생성할 수 없다라는 메시지와 TypeError발생한다.


구현한 FrenchDeck2 예제에서 사용되지 않은 delitem()과 inset() 메서드를 구현해야 하므로 MutableSequence ABC가 요구하는 사항이다.


FrenchDeck2는 Sequence로부터 contains(), iter(), reversed(), index(), count()와 같은 바로 사용할 수 있는 메서드를 상속하여 MutablSequence 클래스로부터 append(), reverse(), extend(), pop(), remove(), iadd()메서드를 상속한다.

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

0개의 댓글