219 votes

Comment vérifier (au moment de l'exécution) si une classe donnée est une sous-classe d'une autre classe donnée?

Disons que j'ai un costume de classe et quatre sous-classes de costume: Heart, Spade, Diamond, Club.

 class Suit:
   ...
class Heart(Suit):
   ...
class Spade(Suit):
   ...
class Diamond(Suit):
   ...
class Club(Suit):
   ...
 

J'ai une méthode qui reçoit un costume en tant que paramètre, qui est un objet de classe et non une instance. Plus précisément, il peut ne recevoir qu'une des quatre valeurs: Cœur, Pique, Diamant, Club. Comment puis-je faire une affirmation qui assure une telle chose? Quelque chose comme:

 def my_method(suit):
   assert(suit subclass of Suit)
   ...
 

J'utilise Python 3.

51voto

katrielalex Points 40655

29voto

David Heffernan Points 292687

Vous pouvez utiliser isinstance si vous avez une instance ou issubclass si vous avez une classe. Normalement pensé que c'est une mauvaise idée. Normalement, en Python, vous déterminez si un objet est capable de quelque chose en essayant de le faire.

24voto

paragonX Points 125

La fonction booléenne issubclass(sub, sup) renvoie true si la sous-classe donnée sub est bien une sous-classe de la superclasse sup .

1voto

XORcist Points 2385

Vous pouvez utiliser la classe issub intégrée. Mais la vérification de type est généralement considérée comme inutile, car vous pouvez utiliser le typage de canard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X