구현이 아니라 인터페이스에 맞게 프로그래밍하라.
-감마, 헬름, 존슨, 블리시디스
객체지향 설계의 첫 번째 원칙

1) 덕 타이핑 : 초기 파이썬에서부터 기본적으로 적용된 기법
2) 구스 타이핑(goose typing) : 추상 베이스 클래스(ABC)에서 지원하는 타이핑, 객체가 ABC 형인지 런타임에 검사하는 것
3) 정적 타이핑 (static typing) : C나 자바처럼 정적으로 타입을 검사, 파이썬 버전 3.5부터 typing 모듈과 함께 PEP 484 - 자료형 힌트를 따르는 외부 자료형 검사기로 검사
4) 정적 덕 타이핑 : 파이썬 3.8에서 typing.Protocol의 서브클래스를 통해 지원하며 외부 자료형 검사기가 필요
GET, PUT, HEAD 등과 같이 클라이언트가 서버에 내릴 수 있는 명령을 명시두 프로토콜 모두 클래스가 상속 등을 통해 프로토콜 지원함 선언 필요 X
파이썬 오래 쓰신 분들은 mypy를 싫어하신다고 함. -
class LastUpdatedOrderDict(OrderedDict):
def __setitem__(self, key, value):
super().__setitem__(key, value)
self.move_to_end(key)
__settiem__() 오버라이드
슈퍼클래스에 정의된 super().__setitem__ 호출 -> *key-value 쌍을 추가 or 갱신
self.move_to_end() 호출 -> 갱신된 키 항목이 마지막 항목이 되도록
class NotRecommend(OrderedDict):
def __setitem__(self, key, value):
OrderedDict.__setitem__(self, key, value)
self.move_to_end(key)
❌❌ 위 코드는 권장하지 않음.
OrderedDict가 class문에도 나오고 메서드 안에서도 등장. 이렇게 되면 다른 사람이 class 문 수정할 때 __setitem__ 수정하지 않으면 버그 발생super()는 다중 상속에서의 클래스 계층구조를 처리FYI: C3 선형화 알고리즘
자식 클래스가 부모보다 먼저 탐색
부모 클래스의 순서를 유지
중복된 클래스는 한 번만 탐색
ping은 밑에서부터 A, B, root로 가고