2010-07-24 6 views
8

저는 파이썬에서 폼 유효성 검사를위한 DSL을 만들고 있는데, 하나의 요구 사항은 필드가 상수 또는 다른 필드 값보다 크거나 작아야한다는 것을 지정할 수 있도록하는 것입니다. 따라서 <, >, <=>=과 같은 연산자를 operator 모듈의 해당 기능에 쉽게 매핑하여 필드 유효성 검사 중에 호출 할 수 있도록 노력하고 있습니다.함수 호출에 대한 비교 연산자 비교

저는 연산자를 함수에 매핑하는 사전을 만들 수 있다는 것을 알고 있습니다 만, 더 좋은 방법이 있습니까? 파이썬의 빌트인 매핑에 접근 할 수있는 방법이 있습니까?

+0

저는 정확히 당신이 달성하고자하는 것이 무엇인지 이해하지 못합니다. 파이썬은 이러한 연산자를 '__cmp__','__eq__','__ne__' 등의 메소드에 따라 구현 한'클래스 '에 매핑하고 실제 comparsion 함수에 대한 정확한 매핑은 클래스에 따라 다릅니다. –

+1

물론입니다. 따라서 파이썬에서 어딘가에 '<'가있을 때'obj .__ lt__ '를 호출해야한다는 것을 알고있는 논리가 있습니다. 그러나 나는 문자열을 가지고 있는데, 어떻게 함수 나 메서드 호출로 변환 할 수 있습니까? –

+0

문맥 상 예제를 줄 수 있습니까? –

답변

4

지금까지 내가 알고 있어요 같은 기능 operator.lt에 문자열 ">" 매핑에는 내장 된 사전 등 다른 사람들이 지적했듯이

는, 파이썬 인터프리터 자체는 사용하지 않는이 없다 파이썬 코드를 파싱하고 실행하는 과정에서 먼저 문자 시퀀스 ">"를 해당 연산자를 나타내는 토큰으로 변환 한 다음 바이트 코드로 변환하고 해당 바이트 코드를 실행하면 결과가 __lt__ 메서드에서 직접 실행되므로, operator.lt 함수가 아닌

3

<에서 __lt__까지의 파이썬 내부 매핑은 표준 라이브러리의 어느 곳에도 공개되지 않습니다. 툴킷으로 공개되지 않는 Python의 내부 구조에 대해서는 많은 부분이 있습니다. 나는 그런 맵핑이 어떻게 만들어 질지에 대해서는 일반적으로 확신 할 수 없다. 무엇이 __getitem__에지도로 나타 납니까?

사용자가 직접 매핑을 만들어야합니다. 어렵지 않아야합니다.