2009-12-21 8 views

risposta

33

Sì, non c'è modo. È possibile utilizzare una funzione issubclass.

come segue:

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

issubclass(p2, p1) 
+1

Attenzione: 'issubclass (A, A)' restituisce 'true'. Questo potrebbe non essere intuitivo. Almeno per me, sembra ovvio che una classe sia ** non ** propria sottoclasse. 'issubclass' avrebbe dovuto essere chiamato' istypeofclass'. – ilmiacs

+1

@limiacs, per me che pensa che le classi siano come 'set', questo non mi infastidisce. A è un sottoinsieme di A. –

5

penso che si intende utilizzare "classe" al posto di "def" .. :) In ogni caso, provare p2.__bases__

6

A seconda di quello che stai cercando di fare, il metodo del "MRO" può anche essere utile.

41

utilizzando <classe>. _ _ basi _ _ sembra essere quello che state cercando ...

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

-1: 'issubclass' è sicuramente la soluzione migliore. – nikow

+2

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

+12

@nikow, giusto ... ma il problema con issubclass() è che richiede una classe da confrontare, mentre __ basi __ sarà solo darti la superclasse (i) a titolo definitivo. Entrambe le soluzioni possono essere utili a seconda delle circostanze. – Andz

Problemi correlati