2009-12-21 3 views

Répondre

33

Oui, il y a moyen. Vous pouvez utiliser une fonction.

comme suit:

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

issubclass(p2, p1) 
+1

Attention: 'issubclass (A, A)' évalue à 'true'. Cela peut ne pas être intuitif. Au moins pour moi, il semble évident qu'une classe n'est pas ** sa propre sous-classe. 'issubclass' aurait dû s'appeler' istypeofclass'. – ilmiacs

+1

@limiacs, pour moi qui pense que les classes sont «set», cela ne me dérange pas. A est un sous-ensemble de A. –

5

Je pense que vous vouliez utiliser « classe » au lieu de « def » .. :) Quoi qu'il en soit, essayez p2.__bases__

6

Selon ce que vous essayez de faire, la méthode « MRO » peut également être utile.

41

en utilisant <classe>. _ _ bases _ _ semble être ce que vous cherchez ...

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

-1: 'issubclass' est certainement la meilleure solution. – nikow

+2

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

+12

@nikow, à droite ... mais le problème avec issubclass() est qu'il faut donner une classe à comparer, alors que __ bases __ sera juste vous donner la superclasse (es) purement et simplement. Les deux solutions peuvent être utiles selon les circonstances. – Andz