2014-12-22 2 views
2

Google AppEngine NDB 쿼리는 이상한 짐승입니다. 색상 및 체중 속성이있는
클래스의 클래스 (및 ndb 엔티티)가 있다고 가정 해보십시오. 내가 "함수 호출"이런 종류의에 파이썬이 문서를 본 적이동적 속성 이름으로 GAE NDB 쿼리 호출

Car.query(Car.color == "blue") 

할 수 있습니다. 얼마나 많은 인수가 전달됩니까? 논리적으로는 부울 인 중 하나이지만 "쿼리"는 해당 인수의 소스 코드 을 찾고 Car.color, == 및 "blue"를 얻을 수 있습니다. 개발자가 이러한 종류의 함수 인 을 정의 할 수 있습니까? 아니면이 컴파일러를 해킹 할 수 있습니까?

내 진짜 문제는 내가 (이 경우 "자동차") 클래스에 대한 필드가 사용자 입력 대화 재산 (이 경우 "컬러") 하고 값을 (가지고 "블루"입니다 이 경우). 이러한 입력을받는 쿼리를 구성하고 호출하려면 어떻게해야합니까?

답변

4

이것은 파이썬 magic methods으로 이루어지며, 샘플은 __eq__입니다.

Car.query(getattr(Car, 'color') == 'red') 

이 속성은 쿼리에 대한 전화가 잘 작동, hasattr(Car, 'color')

+0

감사 드미트리를 호출하여 존재하는지 확인해야합니다 :

은이 같은 것을 사용할 수있는 쿼리를 생성합니다. – user1343035

+0

마법 메서드 문서에는 python, esp w.r.t.의 반 직관적 인 디자인을위한 많은 문서가 있습니다. 중절 연산자. 그러나 그것은 질의의 CALLING 메커니즘의 문제를 다루지는 않습니다. 따라서 우리는 쿼리 메소드의 몸체가 분명히 사용할 수없는 호출 소스 코드로부터 정보를 얻습니다. – user1343035

+0

이'Car.color == "blue"'는 특정 값을 반환합니다.이 경우 특정 매개 변수가있는 필터 객체입니다. –