덕타이핑
덕 타이핑이란 무엇인가요?
덕 타이핑은 실제 타입(클래스)은 상관하지 않고, 구현된 메서드로만 판단하는 방식입니다.
덕 타이핑은 "만약 어떤 새가 오리처럼 걷고, 헤엄치고, 꽥꽥거리는 소리를 낸다면 나는 그 새를 오리라 부르겠다."라는 덕 테스트(오리 테스트)에서 유래한 말입니다.
class Duck: # 오리 클래스를 만들고 quack과 feathers 메서드 정의
def quack(self): print('꽥~!')
def feathers(self): print('오리는 흰색과 회색 털을 가지고 있습니다.')
class Person: # 사람 클래스를 만들고 quack과 feathers 메서드 정의
def quack(self): print('사람은 오리를 흉내냅니다. 꽥~!')
def feathers(self): print('사람은 땅에서 깃털을 주워서 보여줍니다.')
def in_the_forest(duck): # 덕 타이핑을 사용하는 함수. 클래스의 종류는 상관하지 않음
duck.quack() # quack 메서드와
duck.feathers() # feathers 메서드만 있으면 함수를 호출할 수 있음
donald = Duck() # 오리 클래스로 donald 인스턴스를 만듦
james = Person() # 사람 클래스로 james 인스턴스를 만듦
in_the_forest(donald) # in_the_forest에 오리 클래스의 인스턴스 donald를 넣음
in_the_forest(james) # in_the_forest에 사람 클래스의 인스턴스 james를 넣음
실행 결과
꽥~!
오리는 흰색과 회색 털을 가지고 있습니다.
사람은 오리를 흉내냅니다. 꽥~!
사람은 땅에서 깃털을 주워서 보여줍니다.
믹스인
믹스인이란 무엇인가요?
믹스인(mix-in)은 다른 클래스에서 사용할 수 있도록 공통적인 메서드를 모아 놓은 클래스를 말합니다.
파이썬에서 믹스인은 자체 인스턴스 속성을 가지고 있지 않으며 __init__ 메서드를 구현하지 않습니다.
공통적 클래스 - HelloMixIn
Student - HelloMixIn + Person
Teacher - HelloMixIn + Person
class HelloMixIn:
def greeting(self): # 인사하는 메서드는 공통적인 메서드
print('안녕하세요.')
class Person():
def __init__(self, name):
self.name = name
class Student(HelloMixIn, Person): # HelloMixIn과 Person을 상속받아 학생 클래스를 만듦
def study(self):
print('공부하기')
class Teacher(HelloMixIn, Person): # HelloMixIn과 Person을 상속받아 선생님 클래스를 만듦
def teach(self):
print('가르치기')
'BASIC' 카테고리의 다른 글
함수 (1) | 2023.11.19 |
---|---|
Exception (0) | 2023.11.19 |
named tuple (0) | 2023.11.17 |
두점 사이 거리구하기 (0) | 2023.11.17 |
self (0) | 2023.11.17 |
댓글