class p1(object): pass
class p2(p1): pass
Donc p2 est la sous-classe de p1. Existe-t-il un moyen de savoir par programmation que p1 est [l'une] de la superclasse [es] de p2?Vérification si A est une super-classe de B en Python
class p1(object): pass
class p2(p1): pass
Donc p2 est la sous-classe de p1. Existe-t-il un moyen de savoir par programmation que p1 est [l'une] de la superclasse [es] de p2?Vérification si A est une super-classe de B en Python
Oui, il y a moyen. Vous pouvez utiliser une fonction.
comme suit:
class p1(object):pass
class p2(p1):pass
issubclass(p2, p1)
Je pense que vous vouliez utiliser « classe » au lieu de « def » .. :) Quoi qu'il en soit, essayez p2.__bases__
Selon ce que vous essayez de faire, la méthode « MRO » peut également être utile.
en utilisant <classe>. _ _ bases _ _ semble être ce que vous cherchez ...
>>> class p1(object): pass
>>> class p2(p1): pass
>>> p2.__bases__
(<class '__main__.p1'>,)
-1: 'issubclass' est certainement la meilleure solution. – nikow
http://docs.python.org/library/functions.html#issubclass –
@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
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
@limiacs, pour moi qui pense que les classes sont «set», cela ne me dérange pas. A est un sous-ensemble de A. –