2016-06-01 8 views
5

का पूर्ण योग्यता प्राप्त नाम प्राप्त करें मैं अपने मॉड्यूल रूट से पूर्ण पथ सहित कक्षा का नाम कैसे प्राप्त कर सकता हूं? पायथन 3.3 और ऊपर के लिए?पाइथन कक्षा (पायथन 3.3+)

class A: 
    class B: 
     class C: 
      def me(self): 
       print(self.__module__) 
       print(type(self).__name__) 
       print(repr(self)) 

x = A.B.C() 
x.me() 

इस कोड को मुझे अजगर 3.3 पर आउटपुट:

यहाँ अजगर कोड का उदाहरण है

__main__ 
C 
<__main__.A.B.C object at 0x0000000002A47278> 

तो, अजगर आंतरिक रूप से जानता है कि मेरी वस्तु __main__.A.B.C है, लेकिन मैं यह कैसे प्राप्त कर सकते हैं प्रोग्राम के रूप में? मैं repr(self) पार्स कर सकता हूं, लेकिन यह मेरे लिए हैक की तरह लगता है।

+1

http://stackoverflow.com/questions/1401661/python-list-all-base-classes-in-a की संभावित डुप्लिकेट - श्रेणीबद्ध श्रेणी के 'कृपया' __bases__' विशेषता के माध्यम से उपयोग जानकारी के लिए वहां देखें और 'निरीक्षण' मॉड्यूल प्रसाद विधि समाधान आदेश ('mro') औपचारिक विरासत श्रृंखला" प्रदर्शन "के अलावा भी दिलचस्प जानकारी है। चूंकि यह नियम कौन सा तरीका है (यदि एकाधिक पेशकश की जाती है) को एक प्रभावी पदानुक्रम की तरह चुना जाएगा। – Dilettant

+1

['__qualname__'] (https://docs.python.org/3/whatsnew/3.3.html#pep-3155-qualified-name-for-classes-and-functions) विशेषता देखें। –

उत्तर

5

आप __qualname__ (अजगर 3.3 से प्रारंभ) के लिए देख रहे हैं:

class A: 
    class B: 
     class C: 
      def me(self): 
       print(self.__module__) 
       print(type(self).__name__) 
       print(type(self).__qualname__) 
       print(repr(self)) 
+0

डी ओह। मैंने इस विशेषता की तलाश की है और इसे आईपीथॉन का उपयोग करके खोजने की कोशिश की है, लेकिन टैब पूर्णता इसे बिल्कुल नहीं दिखाती है। यकीन नहीं है कि क्यों। – bialix

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