프로그래밍 언어 디자인에서 파이썬 언어 기능이란 무엇입니까? 오리 타이핑인가요?
"특정 이름 (또는 서명)을 가진 구성원이있는 모든 개체는 여기서 작동 할 수 있습니다."는 오리 입력입니다. "특정 이름 (또는 서명)을 가진 회원이있는 모든 객체가 언어 기능"으로 작업 할 수 있다고 생각합니다. 그게 당신이 묻는 것이라면.
어떻게 언어 기능이 아래에서 작동합니까?
나는 그 질문을 이해하지 못한다. 언어 기능이 특정 이름의 메소드를 호출하는 경우 해당 이름을 가진 메소드를 호출합니다. 그게 전부 야.
C++, C# 및 Java에서 설명자의 클래스와 반복기의 클래스가 특정 클래스의 하위 클래스로 정의되었을 가능성이 있습니까?
나는이 언어들 중 하나의 기술자와 비슷한 것을 알지 못하며 그것이 존재한다면 어떻게 보이는지 추측하는 것이 합리적이라고 생각하지 않습니다. 반복자에 관해서는
는 각 언어는 foreach 루프를 가지고, 그래서 당신은 볼 수 있습니다 :
C++에서
, 범위 기반 for
루프 인스턴스 멤버 begin
및 end
또는 위해를가 모든 유형에서 작동 begin
및 end
함수가 존재합니다. 반환 된 형식은 ++
, !=
및 *
연산자를 지원해야합니다. C#으로
는 foreach
루프는 MoveNext()
방법 및 Current
속성 유형 인스턴스를 반환 방법 GetEnumerator()
을 갖는 임의의 유형에 작동한다. 같은 모양을 나타내는 IEnumerable<T>
인터페이스도 있습니다. 열거 형은 일반적으로이 인터페이스를 구현하지만 그렇게 할 필요는 없습니다.
Java에서 향상된 for
루프는 Iterable
을 구현하는 모든 유형에서 작동합니다.
그래서 어디에도 하위 클래스가 없습니다 (C# 및 Java는 인터페이스 구현과 기본 클래스에서 파생되는 것을 구분합니다). Java에서는 인터페이스를 구현해야합니다. C#은 오리 타이핑을 사용하지만 선택적으로 인터페이스를 구현할 수도 있습니다. C++은 오리 타이핑을 사용합니다. 인터페이스 나 기본 클래스가 전혀 없습니다.
언어에 따라 특정 언어 기능에 오리 타이핑을 사용할지 여부는 복잡 할 수 있습니다. 극단적 인 예로 C# (콜렉션 초기화)의 한 기능은 특정 인터페이스 (IEnumerable
)의 구현과 특정 이름 (Add
)의 메소드의 존재를 필요로합니다. 따라서이 기능은 부분적으로 오리 형식입니다.
_ "iterators '클래스는'__next__'라는 메소드가있는 클래스로 정의됩니다."_이 값은 잘못되었거나 최소한 잘못 표현되었습니다. iterator는'__next__' 함수가있는 __object__입니다. 이터레이터의 클래스는 조금이라도 상관 없습니다. 이것은 오리 타이핑입니다. –