2009-12-21 15 views
23
class p1(object): pass 
class p2(p1): pass 

में बी के सुपर क्लास है तो p2 p1 के उपवर्ग है। प्रोग्रामेटिक रूप से पता लगाने का कोई तरीका है कि पी 1 [पी] के सुपरक्लास [es] में से एक है?जांच की जा रही है, तो एक अजगर

उत्तर

33

हाँ, वहाँ तरीका है। आप issubclass फ़ंक्शन का उपयोग कर सकते हैं।

के रूप में इस प्रकार है:

class p1(object):pass 
class p2(p1):pass 

issubclass(p2, p1) 
+1

ध्यान दें जो खोज रहे हैं होने के लिए। यह सहज नहीं हो सकता है। कम से कम मेरे लिए, ऐसा लगता है कि एक वर्ग ** ** ** का अपना उप-वर्ग नहीं है। 'issबक्लास 'को' आइसटाइपक्लास 'कहा जाना चाहिए था। – ilmiacs

+1

@limiacs, मेरे लिए जो कक्षाओं को 'सेट' के रूप में सोचते हैं, इससे मुझे परेशान नहीं होता है। ए ए –

5

मुझे लगता है कि आप "def" के बजाय "वर्ग" का उपयोग करने के लिए होती .. :) वैसे भी, कोशिश p2.__bases__

6

तुम क्या करने की कोशिश कर रहे हैं क्या के आधार पर, "एमआरओ" विधि भी उपयोगी हो सकता है।

41

< कक्षा > का उपयोग कर। `Issubclass (ए, ए)` `TRUE` का मूल्यांकन: _ _ ठिकानों _ _ लगता है आप के लिए ...

>>> class p1(object): pass 
>>> class p2(p1): pass 
>>> p2.__bases__ 
(<class '__main__.p1'>,) 
+3

-1 का उप-समूह है: 'जारी करने वाला' निश्चित रूप से बेहतर समाधान है। – nikow

+2

http://docs.python.org/library/functions.html#issubclass –

+12

@nikow, ठीक है ... लेकिन जारी करने के साथ समस्या() यह है कि इसे कक्षा के साथ तुलना करने की आवश्यकता होती है, जबकि __ आधार __ बस आपको superclass (एस) पूरी तरह से दे। परिस्थितियों के आधार पर दोनों समाधान उपयोगी हो सकते हैं। – Andz

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