2015-11-18 11 views
10

मैं कोड है कि तरह है है एक विधि के वर्ग तक पहुंच हासिल करने है?वहाँ एक रास्ता है जब आपके पास एक प्रतिदेय

f.__dict__ कोई मदद नहीं है, लेकिन repr(f)<bound method Bar.foo of <__main__.Bar object at 0x10c6eec18>>' देता है यह संभव होना चाहिए, लेकिन कैसे?

उत्तर

16

प्रत्येक बाध्य विधि __self__ विशेषता है जो

उदाहरण है, जिसमें इस विधि का ही है, या None

(here से नकल)

बाध्य तरीकों के बारे में अधिक (है Data Model से):

यदि आप एक उदाहरण के माध्यम से एक विधि (कक्षा नामस्थान में परिभाषित एक फ़ंक्शन) तक पहुंचते हैं, तो आपको एक विशेष वस्तु मिलती है: एक बाध्य विधि ( उदाहरण विधि कहा जाता है) ऑब्जेक्ट। ... बाउंड तरीकों दो विशेष रीड-ओनली गुण: m.__self__ वस्तु जिस पर विधि संचालित है ...

तो f.__self__ आप वर्ग उदाहरण मिल जाएगा:

print(f.__self__) # <__main__.Foo object at 0x7f766efeee48> 

और

print(type(f.__self__)) # <class '__main__.Foo'> 

आप केवलका उपयोग करेंगे: type(f.__self__) या f.__self__.__class__ आप प्रकार वस्तु मिल जाएगा old-style classes के लिए 210।

+0

नाइटपिक: उदाहरण का प्रकार आवश्यक वर्ग नहीं है जहां फ़ंक्शन परिभाषित किया गया था; सिर्फ इसलिए कि विधि एक्स एक्स के लिए बाध्य है, इसका मतलब यह नहीं है कि फ़ंक्शन को कक्षा वाई में परिभाषित नहीं किया जा सकता है। लेकिन कहा गया है कि यह कोड निश्चित रूप से 99.99% वास्तविक दुनिया परिदृश्यों में सही आउटपुट का उत्पादन करेगा। और वैसे भी यह स्पष्ट नहीं है कि ओपी का अनुमानित आउटपुट 0.01% मामले में क्या होगा। –

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