2014-09-15 10 views
8

एक CPython 3.4 पर कुछ builtin callables पर dir() (कक्षा कंस्ट्रक्टर्स, तरीकों, आदि) करता है में के लिए __signature__ और __text_signature__ उपयोग किया जाता है क्या, एक पता चल गया कि उनमें से कई अक्सर एक विशेष गुण __text_signature__ कहा जाता है, उदाहरण के लिए :अजगर 3.4

>>> print(object.__text_signature__) 
() 
>>> print(int.__text_signature__) 
None 

हालांकि इसके लिए प्रलेखन कोई नहीं है। इसके अलावा, विशेषता नाम के लिए googling से पता चलता है कि एक और संभावित विशेष विशेषता __signature__ है, हालांकि मुझे कोई अंतर्निहित फ़ंक्शंस नहीं मिला है, जो इसे प्राप्त करेगा।

मुझे पता है कि वे फ़ंक्शन तर्क हस्ताक्षर से संबंधित हैं, लेकिन इससे परे कुछ भी नहीं, उनके मूल्य क्या दर्शाते हैं और उनका उपयोग क्या है?

उत्तर

8

ये विशेषताएं सी कोड में परिभाषित पायथन ऑब्जेक्ट्स के लिए आत्मनिरीक्षण सक्षम करने के लिए हैं। C-API Argument ClinicSignature objects बनाते समय inspect मॉड्यूल की सहायता के लिए डेटा प्रदान करता है। सी-एपीआई कार्यों का आत्मनिरीक्षण पहले समर्थित नहीं था।

आंतरिक inspect._signature_fromstr() function देखें __text_signature__ मूल्य का उपयोग कैसे किया जाता है।

वर्तमान में, __text_signature__ विशेषता सी-एपीआई में ऑब्जेक्ट्स पर आंतरिक डॉकस्ट्रिंग सेट से भरी हुई है; objectname(...)\n--\n\n के लिए एक साधारण टेक्स्ट खोज की जाती है, जहां \n--\n\n विशेषता क्लिनिक-जेनरेट किए गए दस्तावेज़ स्ट्रिंग्स की विशिष्टता है। यदि आप कुछ उदाहरण ढूंढना चाहते हैं तो type object slots पर एक नज़र डालें। या आप audioop module source देख सकते हैं कि हस्ताक्षर परिभाषित करने के लिए Argument Clinic का उपयोग कैसे किया जा रहा है; डॉकस्ट्रिंग उत्पन्न करने के लिए निर्माण करते समय Argument Clinic script उन पर चल रहा है (साथ में audioop.c.h file)।

__signature__ विशेषता, यदि मौजूद है, तो inspect.Signature() ऑब्जेक्ट होगा; टेक्स्ट संस्करण प्रदान करने के बजाय एक सी-एपीआई इसके बजाय पूरी तरह से पार्स किए गए Signature इंस्टेंस प्रदान कर सकता है।

+0

आपके उत्तर में एक गंभीर त्रुटि है, हालांकि सी-एपीआई को उसी नाम से मॉन्टी पायथन स्केच का संदर्भ, Argument Clinic कहा जाता है;) –

+0

@Antti: * मैंने आपको एक बार * बताया है। –

+0

शुरुआत अभी भी "विशेषता क्लिनिक" कहती है: डी –

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