>  기사  >  백엔드 개발  >  덕타이핑 덕타입 프로그래밍과 Python 구현에 대한 자세한 설명

덕타이핑 덕타입 프로그래밍과 Python 구현에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-03-03 15:38:552666검색

프로그래밍에서 덕 타이핑은 동적 타이핑 스타일입니다. 이 스타일에서 객체의 효과적인 의미는 특정 클래스에서 상속하거나 특정 인터페이스를 구현하는 것이 아니라 현재 메서드 및 속성 집합에 따라 결정됩니다.

이 개념의 이름은 James Whitcomb Riley가 제안한 오리 테스트에서 유래되었습니다. "오리 테스트"는 다음과 같이 표현될 수 있습니다.
"새가 오리처럼 걷는 것을 보고 오리가 오리처럼 꽥꽥거린다면 새를 오리라고 부를 수 있습니다. "
오리 타이핑에서는 물체 자체의 종류가 아니라 어떻게 사용되는지에 중점을 둡니다. 예를 들어, 오리 타이핑을 사용하지 않는 언어에서는 duck 유형의 객체를 가져와서 해당 객체의 걷기 및 짖기 메서드를 호출하는 함수를 작성할 수 있습니다. 덕 타이핑을 사용하는 언어에서 이러한 함수는 모든 유형의 객체를 허용하고 해당 객체의 걷기 및 호출 메서드를 호출할 수 있습니다. 호출해야 하는 메서드가 존재하지 않으면 런타임 오류가 발생합니다. 올바른 걷기 및 호출 메소드를 가진 모든 객체가 함수에 의해 허용될 수 있다는 사실은 위의 설명으로 이어지며, 따라서 이러한 유형 결정 방법의 이름이 붙여졌습니다.
오리 타이핑은 메소드와 함수의 매개변수 유형을 테스트하지 않고 문서화, 명확한 코드, 테스트를 통해 올바른 사용법을 확인하는 것에서 이점을 얻는 경우가 많습니다. 정적으로 유형이 지정된 언어에서 동적으로 유형이 지정된 언어로 이동하는 사용자는 종종 정적(런타임 전) 유형 검사를 추가하려고 시도하여 덕 타이핑의 이점과 확장성을 손상시키고 언어의 동적 특성을 제한합니다.

Python 코드 예시
위 문이 너무 비어 있을 수 있습니다. 예를 들어 Python에는 StringIO, GzipFile, 소켓 등 파일과 유사한 것들이 많이 있습니다. 그들은 동일한 방법을 많이 가지고 있으며 우리는 그것을 파일로 사용합니다.
예를 들어 list.extend() 메서드에서 반복 가능하다면 매개변수가 목록인지 여부는 상관하지 않으므로 매개변수는 list/tuple/dict/string/generator 등이 될 수 있습니다. .
Duck Typing은 동적 언어에서 자주 사용되며 매우 유연하기 때문에 Python은 많은 디자인 패턴을 처리해야 하는 Java와 다릅니다.

다음 예에서는 다형성을 달성하기 위해 덕 타이핑을 사용합니다.

#coding=utf-8 
class Duck: 
  def quack(self): 
    print "Quaaaaaack!" 
 
class Bird: 
  def quack(self): 
    print "bird imitate duck." 
 
class Doge: 
  def quack(self): 
    print "doge imitate duck." 
 
def in_the_forest(duck): 
  duck.quack() 
 
duck = Duck() 
bird = Bird() 
doge = Doge() 
for x in [duck, bird, doge]: 
  in_the_forest(x)

또 다른 예로
출력 스트림을 해킹해 보겠습니다.

import sys 
 
sys.stdout = open('stdout.log', 'a') #只要是file-like,不管是什么类型 
print 'foo' 
 
sys.stdout = sys.__stdout__ #恢复 
print 'bar'

이런 방식으로 출력 스트림이 파일에 기록됩니다.

오리타이핑 오리타이핑 프로그래밍과 Python 구현 관련 글에 대한 자세한 설명은 PHP 중국어 홈페이지를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.