2017-09-17 4 views
0

이것은 프로그래밍 언어 개념 질문입니다. 스콧의 프로그래밍 언어 어용 론 수준과 비슷하다. 파이썬 어떤 종류의 클래스가 특별한 이름의 메소드를 갖는 용어로 정의되는 언어 기능은 무엇입니까?

는 오브젝트의 일부 종류의 클래스는

  1. 디스크립터 '클래스 __get__라는 방법을 갖는 클래스로 정의되고, 예를 들어, 특별한 이름을 가진 몇 가지 방법을 갖는 측면에서 정의한 __set__ 또는 __delete__().
  2. 이터레이터 클래스는 __next__이라는 메서드를 가진 클래스로 정의됩니다.

질문 : 파이썬 언어 기능을 프로그래밍 언어 설계에 소위

  1. ? 오리 타이핑인가요?
  2. 언어 기능은 어떻게 작동합니까?
  3. C++, C# 및 Java에서 설명자의 클래스와 반복자의 클래스가 특정 클래스의 하위 클래스 인 으로 정의되었을 가능성이 있습니까? 파이썬에서

    , (유사 C#을 인터페이스 IDisposable에)

    • 은 기술자 '클래스는 일부 특정 클래스의 서브 클래스로 정의 할 수 있습니까?

    • 반복자 클래스를 특정 클래스의 하위 클래스로 정의 할 수 있습니까?

+0

_ "iterators '클래스는'__next__'라는 메소드가있는 클래스로 정의됩니다."_이 값은 잘못되었거나 최소한 잘못 표현되었습니다. iterator는'__next__' 함수가있는 __object__입니다. 이터레이터의 클래스는 조금이라도 상관 없습니다. 이것은 오리 타이핑입니다. –

답변

1

프로그래밍 언어 디자인에서 파이썬 언어 기능이란 무엇입니까? 오리 타이핑인가요?

"특정 이름 (또는 서명)을 가진 구성원이있는 모든 개체는 여기서 작동 할 수 있습니다."는 오리 입력입니다. "특정 이름 (또는 서명)을 가진 회원이있는 모든 객체가 언어 기능"으로 작업 할 수 있다고 생각합니다. 그게 당신이 묻는 것이라면.

어떻게 언어 기능이 아래에서 작동합니까?

나는 그 질문을 이해하지 못한다. 언어 기능이 특정 이름의 메소드를 호출하는 경우 해당 이름을 가진 메소드를 호출합니다. 그게 전부 야.

C++, C# 및 Java에서 설명자의 클래스와 반복기의 클래스가 특정 클래스의 하위 클래스로 정의되었을 가능성이 있습니까?

나는이 언어들 중 하나의 기술자와 비슷한 것을 알지 못하며 그것이 존재한다면 어떻게 보이는지 추측하는 것이 합리적이라고 생각하지 않습니다. 반복자에 관해서는

는 각 언어는 foreach 루프를 가지고, 그래서 당신은 볼 수 있습니다 :

C++에서

, 범위 기반 for 루프 인스턴스 멤버 beginend 또는 위해를가 모든 유형에서 작동 beginend 함수가 존재합니다. 반환 된 형식은 ++, !=* 연산자를 지원해야합니다. C#으로

foreach 루프는 MoveNext() 방법 및 Current 속성 유형 인스턴스를 반환 방법 GetEnumerator()을 갖는 임의의 유형에 작동한다. 같은 모양을 나타내는 IEnumerable<T> 인터페이스도 있습니다. 열거 형은 일반적으로이 인터페이스를 구현하지만 그렇게 할 필요는 없습니다.

Java에서 향상된 for 루프는 Iterable을 구현하는 모든 유형에서 작동합니다.

그래서 어디에도 하위 클래스가 없습니다 (C# 및 Java는 인터페이스 구현과 기본 클래스에서 파생되는 것을 구분합니다). Java에서는 인터페이스를 구현해야합니다. C#은 오리 타이핑을 사용하지만 선택적으로 인터페이스를 구현할 수도 있습니다. C++은 오리 타이핑을 사용합니다. 인터페이스 나 기본 클래스가 전혀 없습니다.

언어에 따라 특정 언어 기능에 오리 타이핑을 사용할지 여부는 복잡 할 수 있습니다. 극단적 인 예로 C# (콜렉션 초기화)의 한 기능은 특정 인터페이스 (IEnumerable)의 구현과 특정 이름 (Add)의 메소드의 존재를 필요로합니다. 따라서이 기능은 부분적으로 오리 형식입니다.

1

당신이 찾고있는 용어는 The Python Data Model가 (단지 던더-방법과 -attributes 이상이 더있다, 그러나 그들은 그것의 중요한 부분)입니다.

1

이 부분은 오리 유형입니다.

동적 유형 지정 언어 인 Python은 실제 동작 유형보다 실제 유형의 객체를 덜어줍니다. 속담처럼, 그것이 오리처럼 쑤셔 넣는다면, 아마 오리 일 것입니다; 기술자의 경우 Python은 특수 메소드를 정의한다는 것을 알고 싶어하고, 그렇다면 파이썬은 그것이 기술자임을 받아 들인다.

관련 문제