2009-12-21 4 views

Respuesta

33

Sí, no hay manera. Puede usar una función issubclass.

de la siguiente manera:

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

issubclass(p2, p1) 
+1

Atención: 'issubclass (A, A)' 'se evalúa como TRUE. Esto puede no ser intuitivo. Al menos para mí, parece obvio que una clase es ** no ** su propia subclase. 'issubclass' debería haberse llamado' istypeofclass'. – ilmiacs

+1

@limiacs, para mí que piensa en las clases como 'conjunto ', esto no me molesta. A es un subconjunto de A. –

5

creo que nos referimos a utilizar "clase" en lugar de "def" .. :) De todos modos, intente p2.__bases__

6

Dependiendo de lo que estamos tratando de hacer, el método "MRO" también puede ser útil.

41

usando <clase>. _ _ bases _ _ parece ser lo que estás buscando ...

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

-1: 'issubclass' es ciertamente la mejor solución. – nikow

+2

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

+12

@nikow, correcto ... pero el problema con issubclass() es que requiere dar una clase para comparar, mientras que __ bases __ solo darte la (s) superclase (s) directamente. Ambas soluciones pueden ser útiles según las circunstancias. – Andz

Cuestiones relacionadas