class p1(object): pass
class p2(p1): pass
Quindi p2 è la sottoclasse di p1. C'è un modo per scoprire programmaticamente che p1 è [una delle] superclasse [p]?Verifica se A è superclasse di B in Python
class p1(object): pass
class p2(p1): pass
Quindi p2 è la sottoclasse di p1. C'è un modo per scoprire programmaticamente che p1 è [una delle] superclasse [p]?Verifica se A è superclasse di B in Python
Sì, non c'è modo. È possibile utilizzare una funzione issubclass.
come segue:
class p1(object):pass
class p2(p1):pass
issubclass(p2, p1)
penso che si intende utilizzare "classe" al posto di "def" .. :) In ogni caso, provare p2.__bases__
A seconda di quello che stai cercando di fare, il metodo del "MRO" può anche essere utile.
utilizzando <classe>. _ _ basi _ _ sembra essere quello che state cercando ...
>>> class p1(object): pass
>>> class p2(p1): pass
>>> p2.__bases__
(<class '__main__.p1'>,)
-1: 'issubclass' è sicuramente la soluzione migliore. – nikow
http://docs.python.org/library/functions.html#issubclass –
@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
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
@limiacs, per me che pensa che le classi siano come 'set', questo non mi infastidisce. A è un sottoinsieme di A. –