2009-04-26 1 views
3

잘 작동하는 일부 엔티티를 정의합니다. 메타 프로그래밍 문제. 이제 모델에 정의 된 필드 속성을 반영해야합니다. 예를 들어엘 릭서 리플렉션

:

설정되어있는 관계의 유형
class Foo(Entity): 
     bar = OneToMany('Bar') 
     baz = ManyToMany('Baz') 

"ManyToMany를", "OneToMany"또는 일반 "필드", 그리고 관계의 대상?

엘릭서 개체를 반영하는 간단한 방법이 있습니까?

답변

4

당신은 당신이 어디 파이썬에서와 마찬가지로 비약의 성찰을 할 수있는 - getattr(Foo, thename)에 이름을 부여하는 속성을 추출, dir(Foo)class Foo의 모든 속성 이름을 가져 등 type(theattr) 또는 isinstance와 속성의 유형을 확인 Relationship 하위 클래스 (OneToManyManyToMany 포함)의 생성자에 특성으로 전달하는 문자열 'Bar'은 Relationship 하위 클래스의 결과 인스턴스 r의 r.of_kind 특성으로 끝납니다.

파이썬 표준 라이브러리의 모듈 inspect은 더 쉽게 인트로 스펙 션을 수행 할 수 있지만 dir/getattr/isinstance &c는 많은 경우에 완벽하게 허용됩니다.