Comprobar si A es una superclase de B en Python


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

Así que p2 es la subclase de p1. ¿Hay una manera de averiguar programáticamente que p1 es [una de] la superclase [es] de p2 ?

Author: joozek, 2009-12-21

4 answers

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

Como sigue:

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

issubclass(p2, p1)
 35
Author: Serge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-21 07:58:39

Usando .__ bases _ _ parece ser lo que estás buscando...

>>> class p1(object): pass
>>> class p2(p1): pass
>>> p2.__bases__
(<class '__main__.p1'>,)
 41
Author: user235859,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-21 08:24:07

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

 6
Author: Azeem.Butt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-21 08:03:07

Creo que querías usar "class" en lugar de "def".. De todos modos, intenta p2.__bases__

 5
Author: Joril,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-21 07:54:22