파이썬 개발자들은 파이썬의 덕 타이핑에 익숙하다고 생각합니다. 위키피디아에서는 덕 타이핑에 대한 정확한 정의가 '동적 타이핑 스타일'입니다. 이 스타일에서 객체의 효과적인 의미는 특정 클래스에서 상속하거나 특정 인터페이스를 구현하는 것이 아니라 "현재 메서드 및 속성 집합"에 의해 결정됩니다. 그래서 이 기사에서는 Python의 덕 타이핑(Duck Typing)에 대해 설명합니다.
오리 유형의 기본 정의
우선 Python은 다형성을 지원하지 않으며, 다형성을 지원할 필요도 없습니다. Python은 일종의 다형성 언어로 덕 타이핑(Duck Typing)을 옹호합니다.
다음은 위키피디아에서 나온 덕 타이핑에 대한 논의입니다.
프로그래밍에서 덕 타이핑(영어: 덕 타이핑)은 동적 타이핑 스타일입니다. 이 스타일에서 객체의 효과적인 의미는 특정 클래스에서 상속하거나 특정 인터페이스를 구현하는 것이 아니라 현재 메서드 및 속성 집합에 따라 결정됩니다. 이 개념의 이름은 James Whitcomb Riley가 제안한 오리 테스트에서 유래되었습니다. "오리 테스트"는 다음과 같이 표현될 수 있습니다.
"오리처럼 걷는 새를 보면, 마치 헤엄치듯이 헤엄칩니다. 오리 같고, 오리처럼 꽥꽥거릴 때, 오리처럼 보이면 새를 오리라고 부를 수 있어요."
오리 타이핑에서는 물체 자체의 종류에 중점을 두지 않고, 하지만 그것이 어떻게 사용되는지에 대해서. 예를 들어, 오리 타이핑을 사용하지 않는 언어에서는 duck 유형의 객체를 가져와서 해당 객체의 걷기 및 짖기 메서드를 호출하는 함수를 작성할 수 있습니다. 덕 타이핑을 사용하는 언어에서 이러한 함수는 모든 유형의 객체를 허용하고 해당 객체의 걷기 및 호출 메서드를 호출할 수 있습니다. 호출해야 하는 메서드가 존재하지 않으면 런타임 오류가 발생합니다. 올바른 걷기 및 호출 메소드를 가진 모든 객체가 함수에 의해 허용될 수 있다는 사실은 위의 설명으로 이어지며, 따라서 이러한 유형 결정 방법의 이름이 붙여졌습니다.
오리 타이핑은 메소드와 함수의 인수 유형을 테스트하지 않고 문서화, 명확한 코드, 테스트를 통해 올바른 사용법을 확인함으로써 이점을 얻을 수 있는 경우가 많습니다. 정적으로 유형이 지정된 언어에서 동적으로 유형이 지정된 언어로 이동하는 사용자는 종종 정적(런타임 전) 유형 검사를 추가하려고 시도하여 덕 타이핑의 이점과 확장성을 손상시키고 언어의 동적 특성을 제한합니다.
Python의 특정 구현
다음 코드는 간단한 duck 유형입니다
class duck(): def walk(self): print('I walk like a duck') def swim(self): print('i swim like a duck') class person(): def walk(self): print('this one walk like a duck') def swim(self): print('this man swim like a duck')
duck 유형의 경우 객체 자체의 유형이나 클래스 상속은 중요하지 않고 클래스가 어떻게 사용되는지는 중요하지 않습니다. 다음 코드를 통해 이러한 클래스의 메서드를 호출할 수 있습니다.
def watch_duck(animal): animal.walk() animal.swim() small_duck = duck() watch_duck(small_duck) output >> I walk like a duck i swim like a duck duck_like_man = person() watch_duck(duck_like_man) output >> this one walk like a duck this man swim like a duck class Lame_Foot_Duck(): def swim(self): print('i am lame but i can swim') lame_duck = Lame_Foot_Duck() watch_duck(lame_duck) output >> AttributeError: Lame_Foot_Duck instance has no attribute 'walk'
watch_duck
함수는 이 클래스의 객체를 전달받아 객체의 종류를 확인하지 않고 걷기, 수영 메소드를 직접 호출한다. 필요한 메소드가 없으면 오류가 보고됩니다.
파이썬에서 덕 타이핑의 구체적인 실시예는 다음 코드와 같다
class CollectionClass(): lists = [1,2,3,4] def __getitem__(self, index): return self.lists[index] iter_able_object = CollectionClass() class Another_iterAbleClass(): lists=[1,2,3,4] list_position = -1 def __iter__(self): return self def next(self): #还有更简单的实现,使用生成器或迭代器什么的:) self.list_position += 1 if self.list_position >3: raise StopIteration return self.lists[self.list_position] another_iterable_object=Another_iterAbleClass() print(iter_able_object[1]) print(iter_able_object[1:3]) output>> 2 [2, 3] another_iterable_object[2] output>> Traceback (most recent call last): File "/Users/steinliber/a.py", line 32, in <module> another_iterable_object[2] TypeError: 'Another_iterAbleClass' object does not support indexing print(next(another_iterable_object)) output>> 1 print(next(another_iterable_object)) output>> 2 print(next(iter_able_object)) output>> Traceback (most recent call last): File "/Users/steinliber/a.py", line 29, in <module> print(next(iter_able_object)) TypeError: IterAbleClass object is not an iterator
파이썬에서 위 코드의 구현 방법 프로토콜(프로토콜)이라고 하며 이러한 프로토콜은 호출자가 이 함수를 사용하기 위해 호출해야 하는 개체의 메서드와 이 기능을 완료하기 위해 호출 수신자가 구현해야 하는 메서드를 지정하는 알림 인터페이스로 간주될 수 있습니다. Java의 인터페이스와 다른 점은 Java의 인터페이스 기능은 상속을 통해 구현되어야 한다는 점입니다. 상속된 클래스는 인터페이스의 모든 추상 메소드를 구현해야 하므로 Java에서는 유형의 개념이 강조됩니다. protocol
Python에서는 더 많은 정보를 제공합니다. 함수는 특정 함수를 구현하기 위해 호출해야 하는 개체를 지정합니다. 이러한 메서드를 구현하는 모든 클래스는 이 함수를 구현할 수 있습니다.
구체적으로 말하면 위의 두 클래스 중 첫 번째 클래스는 __getitem__
메서드를 구현한 다음 Python 인터프리터가 이를 컬렉션으로 처리하고 이 클래스의 개체에 대해 슬라이스를 사용할 수 있습니다. 하위 항목을 얻는 경우, 두 번째 클래스가 __iter__
및 next
메서드를 구현하면 Python은 이를 반복자로 간주하고 이 클래스의 개체에 대한 루프를 통해 각 하위 항목을 얻을 수 있습니다. 클래스는 구현할 수 있는 메서드를 구현할 수 있으며, 의미가 있는 상황에서만 사용할 수 있습니다.
위의 duck 클래스와 비교하면 모서리 자르기에 사용되는 [](실제로 Python의 slice
함수를 호출함)와 반복에 사용되는 iter()
는 watch_duck
함수와 동일하며, 이러한 함수는 객체를 수신합니다. 함수를 구현하기 위해 필요한 객체의 클래스 및 호출 메소드 중 해당 함수에서 호출된 메소드 객체가 존재하지 않으면 오류가 보고됩니다.
위에서 볼 수 있듯이 Python 덕 타이핑의 유연성은 객체 유형 자체가 무엇인지보다는 호출된 객체가 어떻게 사용되는지에 초점을 맞춘다는 것입니다. 따라서 Python에서 들어오는 매개변수의 유형을 결정하기 위해 isinstance
를 사용하는 것은 권장되지 않습니다. 더 좋은 방법은 들어오는 매개변수를 직접 사용하고 들어오는 매개변수가 형식을 충족하지 않는 경우 try 및 pythonic
을 사용하여 처리하는 것입니다. 요구 사항. 객체의 유형을 전달하는 대신 해당 기능을 전달하여 객체를 사용해야 합니다. except
요약
위는 Python duck 유형에 대한 자세한 소개입니다. 이 기사의 내용은 여전히 매우 자세하게 설명되어 있습니다. 파이썬을 배우는 여러분, 궁금한 점이 있으면 메시지를 남겨서 소통하세요.
파이썬의 덕 타이핑에 대한 더 자세한 글은 PHP 중국어 홈페이지를 주목해주세요!

PythonlistsCanstoreAnyDatAtype, ArrayModuLearRaysStoreOneType 및 NUMPYARRAYSAREFORNUMERICALPUTATION.1) LISTSAREVERSATILEBUTLESSMEMORY-EFFICENT.2) ARRAYMODUERRAYRAYRAYSARRYSARESARESARESARESARESARESAREDOREDORY-UNFICEDONOUNEOUSDATA.3) NumpyArraysUraysOrcepperperperperperperperperperperperperperperperferperferperferferpercient

whenyouattempttoreavalueofthewrongdatatypeinapythonaphonarray, thisiSdueTotheArrayModule의 stricttyPeenforcement, theAllElementStobeofthesAmetypecified bythetypecode.forperformancersassion, arraysaremoreficats the thraysaremoreficats thetheperfication the thraysaremorefications는

Pythonlistsarepartoftsandardlardlibrary, whileraysarenot.listsarebuilt-in, 다재다능하고, 수집 할 수있는 반면, arraysarreprovidedByTearRaymoduledlesscommonlyusedDuetolimitedFunctionality.

thescriptIsrunningwithHongpyThonversionDueCorRectDefaultTerpretersEttings.tofixThis : 1) checktheDefaultPyThonVersionUsingPyThon-VersionorPyThon3- version.2) usvirtual-ErondmentsBythePython.9-Mvenvmyenv, 활성화, 및 파괴

PythonArraysSupportVariousOperations : 1) SlicingExtractsSubsets, 2) 추가/확장 어드먼트, 3) 삽입 값 삽입 ATSpecificPositions, 4) retingdeletesElements, 5) 분류/ReversingChangesOrder 및 6) ListsompectionScreateNewListSbasedOnsistin

NumpyArraysareSentialplosplicationSefficationSefficientNumericalcomputationsanddatamanipulation. Theyarcrucialindatascience, MachineLearning, Physics, Engineering 및 Financeduetotheiribility에 대한 handlarge-scaledataefficivally. forexample, Infinancialanyaly

UseanArray.ArrayOveralistInpyThonWhendealingwithhomogeneousData, Performance-CriticalCode, OrinterFacingwithCcode.1) HomogeneousData : ArraysSaveMemorywithtypepletement.2) Performance-CriticalCode : arraysofferbetterporcomanceFornumericalOperations.3) Interf

아니요, NOTALLLISTOPERATIONARESUPPORTEDBYARRARES, andVICEVERSA.1) ArraySDONOTSUPPORTDYNAMICOPERATIONSLIKEPENDORINSERTWITHUTRESIGING, WHITHIMPACTSPERFORMANCE.2) ListSDONOTEECONSTANTTIMECOMPLEXITEFORDITITICCESSLIKEARRAYSDO.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.
