Fonction Python issubclass()
Fonctions intégrées de Python3
issubclass()C'est une fonction intégrée de Python utilisée pour vérifier si une classe est une sous-classe d'une autre classe.
issubclass()Elle est utilisée pour déterminer la relation d'héritage entre les classes, et peut vérifier les sous-classes directes et indirectes.
Définitions de mots: issubclass 是 is a subclass(是一个子类)的缩写。
Syntaxe de base et paramètres
Syntaxe
issubclass(class, classinfo)
Description du paramètre
- Paramètre class:
- Type: class
- Description: La classe à vérifier.
- Paramètre classinfo:
- Type: class ou tuple de classes
- Description: La classe parente ou un tuple de classes à comparer.
Description de la fonction
- Valeur de retour: Renvoie une valeur booléenne
TrueouFalse。 - Fonctionnalité: Une classe est toujours considérée comme une sous-classe d'elle-même.
Exemples
Exemple 1 : Utilisation de base
Exemple
# Définition de classe
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Husky(Dog):
pass
# Vérifier la relation d'héritage
print(issubclass(Dog, Animal)) # Sortie : True
print(issubclass(Cat, Animal)) # Sortie : True
print(issubclass(Dog, Cat)) # Sortie : False
# Héritage indirect
print(issubclass(Husky, Animal)) # Sortie : True (chaîne d'héritage : Husky -> Dog -> Animal)
print(issubclass(Husky, Dog)) # Sortie : True
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Husky(Dog):
pass
# Vérifier la relation d'héritage
print(issubclass(Dog, Animal)) # Sortie : True
print(issubclass(Cat, Animal)) # Sortie : True
print(issubclass(Dog, Cat)) # Sortie : False
# Héritage indirect
print(issubclass(Husky, Animal)) # Sortie : True (chaîne d'héritage : Husky -> Dog -> Animal)
print(issubclass(Husky, Dog)) # Sortie : True
Sortie attendue :
True True False True True
Analyse du code :
- La sous-classe est une sous-classe de la classe parente.
- L'héritage indirect (la classe petite-fille) est aussi une sous-classe de la classe ancêtre.
Exemple 2 : Utilisation d'un tuple de classes
Exemple
# Vérifier s'il appartient à plusieurs classes
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Robot:
pass
print(issubclass(Dog, (Animal, Robot))) # Sortie : True
print(issubclass(Dog, (Cat, Robot))) # Sortie : False
# Une classe est aussi une sous-classe d'elle-même
print(issubclass(int, int)) # Sortie : True
print(issubclass(str, str)) # Sortie : True
# Classe de base abstraite
from collections.abc import MutableSequence
print(issubclass(list, MutableSequence)) # Sortie : True
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class Robot:
pass
print(issubclass(Dog, (Animal, Robot))) # Sortie : True
print(issubclass(Dog, (Cat, Robot))) # Sortie : False
# Une classe est aussi une sous-classe d'elle-même
print(issubclass(int, int)) # Sortie : True
print(issubclass(str, str)) # Sortie : True
# Classe de base abstraite
from collections.abc import MutableSequence
print(issubclass(list, MutableSequence)) # Sortie : True
Sortie réelle :
Affichez le résultat selon les conditions d'exécution réelles.
Analyse du code :
- Vous pouvez vérifier s'il appartient à l'une quelconque de plusieurs classes.
- Une classe est toujours une sous-classe d'elle-même.
Exemple 3 : Application pratique
Exemple
# Implémentation du polymorphisme
class Shape:
def area(self):
raise NotImplementedError
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
# Vérifier le type
shapes = [Circle(5), Rectangle(3, 4), Circle(2)]
for shape in shapes:
if issubclass(type(shape), Shape):
print(f"Aire : {shape.area()}")
# Utiliser isinstance (recommandé)
for shape in shapes:
if isinstance(shape, Shape):
print(f"Aire de la forme : {shape.area()}")
class Shape:
def area(self):
raise NotImplementedError
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
# Vérifier le type
shapes = [Circle(5), Rectangle(3, 4), Circle(2)]
for shape in shapes:
if issubclass(type(shape), Shape):
print(f"Aire : {shape.area()}")
# Utiliser isinstance (recommandé)
for shape in shapes:
if isinstance(shape, Shape):
print(f"Aire de la forme : {shape.area()}")
Sortie :
L'exécution dans l'environnement réel affichera l'aire de chaque forme.
Remarque : en programmation réelle, on utilise généralementisinstance()plutôt queissubclass(type())。
Fonctions intégrées de Python3
Autres extensions