2010-05-25 3 views
13

저는 메타 클래스에 대해 배우고 있습니다. 나는 이것이 매우 강력한 기술이라고 생각하며, 나는 그것들에 대한 좋은 용도를 찾고있다. 나는 의 약간의 피드백을 받고 싶습니다.을 사용하는 유용한 실용적인 예가 좋습니다. 나는 메타 클래스를 작성하는 방법에 대한 예제 코드를 찾고 있지는 않지만 (실제로 쓸모없는 메타 클래스 예제가 많이있다.), 실제로이 기술을 적용한 실제 예가 실제로 적절한 해결책이었다. 규칙은 이론적 인 가능성이 없지만 실제 응용 프로그램에서 작동하는 메타 클래스입니다. 나는 하나의 예와 함께 시작합니다실용적인 (예 : 파이썬)

내가 알고

  • 장고 모델, 기본 클래스 모델로부터 유용한 ORM 기능의 모델 객체를 채우기 위해 메타 클래스를 사용 선언적 프로그래밍에 대한 속성 정의

귀하의 기여를 기대합니다.

답변

2

FormEncode 검증 및 Turbogears/Tosca 위젯 : 구문은 매우 approximative 수 있지만 코드는 복잡한 문장보다 더 쉽게 내 지점을 설명 할 것이다 - 그것은 다음과 같은 라인을 따라 뭔가이었다.

classdecorators : 최신 릴리스로 작성하고 이전에 메타 클래스로 처리 한 많은 유스 케이스를 처리 할 수 ​​있습니다.

0

SQLalchemy는 선언적 데이터베이스 모델에도이 매개 변수를 사용합니다.

죄송합니다. 내 대답은 당신의 예제와 크게 다르지 않지만, 예제 코드를 찾고 있다면, 나는 꽤 읽을만한 것으로 declarative을 발견했습니다.

3

파이썬 2.6 및 3.1에서 파이썬 표준 라이브러리는 추상 기본 클래스 ("ABC")에 대한 메타 클래스 인 abc.ABCMeta을 제공합니다. 메타 클래스를 사용하는 클래스는 @abstractmethod 및 @abstractproperty를 사용하여 추상 메서드 및 속성을 정의 할 수 있습니다. 메타 클래스는 파생 클래스가 추상 메서드 및 속성을 무시하도록합니다.

또한 ABC를 실제로 상속하지 않고 구현하는 클래스는 인터페이스 구현으로 등록 할 수 있으므로 issubclassisinstance이 작동합니다.

예를 들어, collections 모듈은 Sequence ABC를 정의합니다. tupleSequence에서 실제로 상속되지는 않지만 형식을 으로 호출하여 Sequence 형식으로 등록합니다.

0

내가 지금까지 메타 클래스를 사용한 유일한 시간은 비추천 경고 메커니즘을 작성하는 것이 었습니다.

class New(object): 
    pass 

class Old(object): 
    def __new__(self): 
    deprecation_warning("Old class is no more supported, use New class instead") 
    return New() 
2

프로토콜 버퍼의 Python 구현은 메타 데이터를 사용하여 데이터 형식을 나타내는 Python 바인딩을 생성합니다. From the tutorial :

중요한 클래스는 __metaclass__ = reflection.GeneratedProtocolMessageType입니다. 파이썬 메타 클래스의 작동 방법에 대한 자세한 내용은이 튜토리얼의 범위를 벗어나는 것이지만 클래스를 작성하기위한 템플리트와 같은 것이라고 생각할 수 있습니다.로드 할 때 GeneratedProtocolMessageType 메타 클래스는 지정된 설명자를 사용하여 각 메시지 유형에 대해 작업해야하는 모든 Python 메서드를 만들고 관련 클래스에 추가합니다. 그런 다음 코드에서 완전히 채워진 클래스를 사용할 수 있습니다.