2010-07-23 19 views
19

क्या उप-वर्ग का नाम प्राप्त करना संभव है? उदाहरण के लिए:सबक्लास नाम प्राप्त करें?

class Foo: 
    def bar(self): 
     print type(self) 

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

प्रिंट होगा: < type 'instance' >

मैं एक तरह से "SubFoo" पाने के लिए देख रहा हूँ।

मुझे पता है कि आप isinstance कर सकते हैं, लेकिन मुझे कक्षा का नाम प्राथमिकता नहीं है, इसलिए यह मेरे लिए काम नहीं करता है।

+0

.. कम से कम, आप उपयोग कर सकते हैं' – mykhal

उत्तर

8
#!/usr/bin/python 
class Foo(object): 
    def bar(self): 
    print type(self) 

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

object से उपवर्गीकरण आप नई शैली कक्षाओं देता है (देता है जो अब इतने नए नहीं हैं - पायथन 2.2!) जब भी आप स्वयं विशेषता के साथ काम करना चाहते हैं तो आप ऑब्जेक्ट से उपclass करते हैं तो आपको अपने हिरन के लिए बहुत कुछ मिल जाएगा। पायथन के दस्तावेज़ ... new style classes। ऐतिहासिक रूप से पाइथन ने पिछड़े संगतता के लिए पुराने शैली के तरीके Foo() को छोड़ दिया। लेकिन, यह बहुत समय पहले था। वस्तु से उपclass नहीं करने के लिए अब और अधिक कारण नहीं है।

+0

और 'Foo() 'पाइथन के पुराने-पर्याप्त संस्करणों पर भी काम नहीं करेगा। –

3

जब आप नई शैली के वर्गों का उपयोग करते हैं तो यह बहुत बेहतर काम करता है।

class Foo(object): 
    .... 
13

आप उपयोग कर सकते

SubFoo().__class__.__name__ 

जो विषय से हटकर हो सकता है, क्योंकि यह आप एक वर्ग के नाम :)

+0

@ars बिल्कुल – mykhal

+0

ओह, माफ करना। तुम सही हो, मेरा बुरा। – ars

1

SubFoo.__name__

और माता-पिता: `issubclass (SubFoo, फू) [cls.__name__ for cls in SubFoo.__bases__]

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