2008-08-29 2 views
8

다른 언어로 구현 된 Python 설명자 프로토콜과 같은 것이 있습니까? 그것은 포함하는 클래스의 구현을 bloating하지 않고 모듈화/캡슐화를 향상시키는 좋은 방법 인 것처럼 보이지만 다른 언어로는 비슷한 것을 들어 본 적이 없습니다. 조회 오버 헤드로 인해 다른 언어에 빠질 가능성이 있습니까?다른 언어의 파이썬 설명자 프로토콜이 유사합니까?

답변

4

나는 직접적인 것에 대해서도 들어 본 적이 없다. 매우 강력한 매크로를 가진 Lisp과 같은 언어를 사용하면 특히 매크로에서 동일한 효과를 얻을 수 있습니다.

다른 언어가 너무 강력하기 때문에 유사한 언어가 포함되어 있으면 놀랄 일도 아닙니다.

0

Ruby와 C# 모두 Python에서와 마찬가지로 속성에 대해 getter/setter 메서드를 지정하여 쉽게 접근자를 만들 수 있습니다. 그러나 이것은 자연스럽게 파이썬이 허용하는 방식으로 다른 클래스에서이 메소드의 코드를 작성할 수 있도록 설계되지 않았습니다. 실제로, 나는이 문제가 얼마나 중요한지 알지 못한다. 왜냐하면 디스크립터 프로토콜을 통해 정의 된 속성이 매번 동일한 클래스에서 구현 된 것을 보았 기 때문이다.

EDIT : 내 실독증을 마셔 라 (부주의 한 독서를 의미 함). 웬일인지 필자는 항상 "descriptor"를 "decorator"로 읽었고, 그 반대도 마찬가지였습니다. 둘 다 입력하는 경우에도 마찬가지였습니다. 그것이 유효한 정보를 가지고 있기 때문에 나는 내 지위를 그대로 남겨 둘 것이다. 비록 그 질문에 절대적으로 아무런 관련이없는 정보 임에도 불구하고.

"데코레이터"라는 용어 자체는 실제로 유명한 "디자인 패턴"책에 설명 된 디자인 패턴의 이름입니다. Wikipedia 기사에는 데코레이터 사용법의 여러 프로그래밍 언어로 된 많은 예가 포함되어 있습니다. http://en.wikipedia.org/wiki/Decorator_pattern

그러나 기사의 데코레이터는 객체 지향적입니다. 그들은 기존의 다른 클래스가 어떤 식 으로든 다르게 동작하도록 미리 정의 된 인터페이스를 구현합니다. 파이썬 장식자는 런타임에 함수를 다른 함수로 대체하여 함수를 효과적으로 수정/대체 할 수있는 기능적 방식으로 작동합니다.

이것은 Aspect-Oriented 프로그래밍으로 알려져 있으며 AspectJ Java 컴파일러는 이러한 종류의 작업을 수행하고 Java의 상위 세트 인 AspectJ 코드를 Java 바이트 코드로 컴파일 할 수있게한다.

나는 데코레이터의 버전이 무엇인지 알기에는 C#이나 루비에 익숙하지 않다.

+0

[설명자 프로토콜] (http://docs.python.org/ref/descriptors.html)은 [장식 패턴] (http://www.python.org/dev/peps/)과 동일하지 않습니다. pep-0318 /)을 Python에서 - 나는 동적으로 "프록시 화"된 다른 객체의 속성에 객체 인스턴스를 만드는 기능을 언급합니다. – cdleary

관련 문제