2010-07-24 13 views
8

मैं पाइथन में फॉर्म सत्यापन के लिए एक डीएसएल बना रहा हूं, और आवश्यकताओं में से एक यह निर्दिष्ट करने में सक्षम होना चाहिए कि एक फ़ील्ड निरंतर या किसी अन्य फ़ील्ड मान से अधिक या कम होना चाहिए। नतीजतन, मैं आसानी से <, >, <= और >= ऑपरेटरों को operator मॉड्यूल में उनके समकक्ष कार्यों में आसानी से मैप करने की कोशिश कर रहा हूं, ताकि उन्हें फील्ड सत्यापन के दौरान बुलाया जा सके।मानचित्र तुलना ऑपरेटर कॉल करने के लिए कॉल

मुझे एहसास है कि मैं ऑपरेटर को फ़ंक्शन में मैप करने के लिए सिर्फ एक शब्दकोश बना सकता हूं, लेकिन क्या ऐसा करने का एक अच्छा तरीका है? क्या पाइथन के अंतर्निहित मैपिंग तक पहुंचने का कोई तरीका है?

+0

मुझे यकीन नहीं है कि मैं समझता हूं कि आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं। पाइथन 'नक्शा' इन ऑपरेटरों को '__cmp__', '__eq__',' __ne__' और इसी तरह के अनुसार विधियों के अपने कार्यान्वयन के वर्ग के लिए, और वास्तविक संपीड़न समारोह में सटीक मैपिंग कक्षा पर निर्भर करता है। –

+1

बिल्कुल। तो पाइथन में कहीं कुछ तर्क है जो जानता है कि जब यह '<' देखता है, तो उसे 'obj .__ lt__'' कॉल करना चाहिए। लेकिन मेरे पास एक स्ट्रिंग है, '' <''- मैं इसे फ़ंक्शन या विधि कॉल में कैसे परिवर्तित कर सकता हूं? –

+0

क्या आप एक संदर्भ में उदाहरण दे सकते हैं? –

उत्तर

4

जहां तक ​​मुझे पता है कर रहा हूँ, वहाँ कोई अंतर्निहित शब्दकोश समारोह operator.lt को स्ट्रिंग ">" मानचित्रण, आदि

के रूप में अन्य लोगों ने बताया है, पायथन दुभाषिया ही इस तरह का उपयोग नहीं करता है एक शब्दकोश, चूंकि पाइथन कोड को पार्स करने और निष्पादित करने की प्रक्रिया पहले चरित्र अनुक्रम ">" को उस ऑपरेटर का प्रतिनिधित्व करने वाले टोकन में अनुवादित करेगी, जिसे तब बाइटकोड में अनुवादित किया जाएगा, और निष्पादित करने का नतीजा यह है कि बाइटकोड __lt__ विधि को सीधे निष्पादित करेगा, operator.lt फ़ंक्शन के बजाए।

3

< "__lt__ (और इसी तरह) के पाइथन का आंतरिक मैपिंग मानक पुस्तकालय में कहीं भी नहीं उजागर किया गया है। पाइथन के आंतरिक के बारे में बहुत कुछ है जो टूलकिट के रूप में प्रकट नहीं होते हैं। मुझे यह भी यकीन नहीं है कि इस तरह का मैपिंग कैसे बनाया जाएगा। __getitem__ पर क्या नक्शे हैं?

आपको बस अपना खुद का मैपिंग बनाना होगा। यह मुश्किल नहीं होना चाहिए।

संबंधित मुद्दे