2008-09-10 13 views
25

किसी विधि के संदर्भ को देखते हुए, यह जांचने का एक तरीका है कि विधि किसी ऑब्जेक्ट से बंधी है या नहीं? क्या आप इस उदाहरण को भी एक्सेस कर सकते हैं कि यह बाध्य है?आप कैसे जांचते हैं कि एक अजगर विधि बाध्य है या नहीं?

उत्तर

33
def isbound(method): 
    return method.im_self is not None 

def instance(bounded_method): 
    return bounded_method.im_self 

User-defined methods:

जब एक उपयोगकर्ता परिभाषित विधि वस्तु एक वर्ग से उपयोगकर्ता-निर्धारित समारोह वस्तु को पुन: प्राप्त द्वारा बनाई गई है, इसकी im_self विशेषता None है और विधि ऑब्जेक्ट को अनबाउंड कहा जाता है। जब एक अपने उदाहरणों में से एक के माध्यम से एक वर्ग से एक उपयोगकर्ता परिभाषित समारोह वस्तु को पुन: प्राप्त द्वारा बनाई गई है, इसकी im_self विशेषता उदाहरण है, और विधि वस्तु बाध्य होने के लिए कहा जाता है। या तो मामले में, नई विधि के im_class विशेषता से वर्ग जो पुनः प्राप्ति होती है, और अपने im_func विशेषता मूल समारोह वस्तु है।

अजगर 2.6 and 3.0 में:

उदाहरण विधि वस्तुओं वस्तु और समारोह विधि शामिल करने के लिए नए गुण; im_self के लिए नया समानार्थी __self__ है, और im_func __func__ के रूप में भी उपलब्ध है। पुराने नाम अभी भी पायथन 2.6 में समर्थित हैं, लेकिन 3.0 में चलाए गए हैं।

7

अजगर 3 में __self__ विशेषता बाध्य तरीकों पर केवल सेट है। यह सादे कार्यों पर None पर सेट नहीं है (या अनबाउंड विधियों, जो कि अजगर 3 में केवल सादे कार्य हैं)।

कुछ इस तरह का प्रयोग करें:

def is_bound(m): 
    return hasattr(m, '__self__') 
संबंधित मुद्दे

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