class p1(object): pass
class p2(p1): pass
Así que p2 es la subclase de p1. ¿Hay alguna manera de descubrir programáticamente que p1 es [una de] la superclase [es] de p2?Comprobando si A es la clase superior de B en Python
class p1(object): pass
class p2(p1): pass
Así que p2 es la subclase de p1. ¿Hay alguna manera de descubrir programáticamente que p1 es [una de] la superclase [es] de p2?Comprobando si A es la clase superior de B en Python
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)
creo que nos referimos a utilizar "clase" en lugar de "def" .. :) De todos modos, intente p2.__bases__
Dependiendo de lo que estamos tratando de hacer, el método "MRO" también puede ser útil.
usando <clase>. _ _ bases _ _ parece ser lo que estás buscando ...
>>> class p1(object): pass
>>> class p2(p1): pass
>>> p2.__bases__
(<class '__main__.p1'>,)
-1: 'issubclass' es ciertamente la mejor solución. – nikow
http://docs.python.org/library/functions.html#issubclass –
@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
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
@limiacs, para mí que piensa en las clases como 'conjunto ', esto no me molesta. A es un subconjunto de A. –