티스토리 뷰

python lecture/basic

[edu] duck typing(덕 타이핑)

burningrizen 2019. 2. 25. 00:38

Duck Typing - ‘If it walks like a duck and it quacks like a duck, then it must be a duck’ 


해석해보면 ‘오리처럼 걷고, 오리처럼 꽥꽥거리면, 그것은 틀림없이 오리다.’ 라는 뜻입니다.


파이썬과 같은 동적타입의 언어에서 본질적으로 다른클래스라도 객체의 적합성은 객체의 실제 유형이 아니라 특정 

메소드와 속성의 존재에 의해 결정되는 것입니다.


Parrot 클래스와 Airplane 클래스는 분명 서로 상속되거나 하는 그런 관계는 없습니다만, 


내부에 동일한 메소드의 fly()메소드가 있는 것만으로 호출하는 `lift_off(entity)’ 함수에서 fly가 정상적으로 실행됩니다.


마지막 Whale 클래스는 해당 fly() 메소드가 없기 때문에, AttributeError가 발생합니다.


속성과 메소드 존재에 의해 객체의 적합성이 결정된다.


class Parrot:
def fly(self):
print("Parrot flying")


class Airplane:
def fly(self):
print("Airplane flying")


class Whale:
def swim(self):
print("Whale swimming")


def lift_off(entity):
entity.fly()


parrot = Parrot()
airplane = Airplane()
whale = Whale()

lift_off(parrot) # prints `Parrot flying`
lift_off(airplane) # prints `Airplane flying`
lift_off(whale) # Throws the error `'Whale' object has no attribute 'fly'`


__iter__ 같은 반복자 경우에도 덕 타이핑에 해당된다고 할 수 있다.


def print_all(nums):
for num in nums:
print(num)


'python lecture > basic' 카테고리의 다른 글

[edu] attribute (속성)  (0) 2019.02.26
[edu] logging (로깅)  (0) 2019.02.25
[edu] Stack/Queue (스택/큐 자료구조)  (0) 2019.02.24
[edu] 클래스(class)  (0) 2019.02.24
[edu] EAFP VS LBYL (허락보다 용서구하는 것이 쉽다)  (0) 2019.02.22
댓글