Python n'a pas de classes abstraites de la même manière que les langues comme Java ou C. Au lieu de cela, il utilise le module abc
(Classes de base abstrait) pour obtenir des fonctionnalités similaires. Ce module fournit la classe ABC
et le abstractmethod
décorateur.
Pour implémenter une classe abstraite, vous devez d'abord importer la classe ABC
et le décorateur abstractmethod
à partir du module abc
:
from abc import ABC, abstractmethod
Suivant, vous définissez votre classe abstraite par héritage de ABC
. Ensuite, vous déclarez des méthodes abstraites à l'aide du décorateur @abstractmethod
. Les méthodes abstraites n'ont pas de corps; Ils déclarent uniquement la signature de la méthode.
Voici un exemple:
from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass @abstractmethod def perimeter(self): pass
Dans cet exemple, Shape
est une classe abstraite avec deux méthodes abstraites: area
et perimeter
. Tenter d'instancier Shape
directement augmentera un TypeError
.
Les classes abstraites offrent plusieurs avantages clés:
TypeError
, comment appliquer les erreurs potentielles au début du processus de développement. Clé pour appliquer les implémentations des méthodes dans les sous-classes. Si une sous-classe n'implémente pas toutes les méthodes abstraites définies dans sa classe abstraite des parents, tenter d'instancier la sous-classe augmentera un @abstractmethod
La classe TypeError
implémente uniquement la méthode
si vous essayez de l'instanciation. La classe
implémente correctement les deux méthodes abstraites, permettant l'instanciation.from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass @abstractmethod def perimeter(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14159 * self.radius * self.radius # Missing perimeter method! class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height def perimeter(self): return 2 * (self.width + self.height) # This will raise a TypeError # circle = Circle(5) rectangle = Rectangle(4, 5) print(rectangle.area()) # Output: 20 print(rectangle.perimeter()) # Output: 18
Bien que Python n'ait pas d'interfaces explicites de la même manière que Java ou C #, les classes abstraites servent efficacement le but des interfaces. Une classe abstraite avec uniquement des méthodes abstraites agit comme une interface, définissant un contrat à laquelle les classes concrètes doivent adhérer.
Cela signifie que vous pouvez utiliser des classes abstraites pour spécifier un ensemble de méthodes que toute classe d'implémentation doit fournir, sans spécifier de détails d'implémentation. Cela favorise le couplage lâche et les meilleurs principes de conception. La différence est subtile; L'approche de Python met l'accent sur l'héritage de l'implémentation avec la définition de l'interface, tandis que les langages avec des interfaces explicites les découplent souvent.
Par exemple, si vous n'aviez besoin que des signatures de la méthode sans aucune implémentation dans Shape
, vous utiliseriez toujours une classe abstraite, créant efficacement une interface:
from abc import ABC, abstractmethod
Cela ShapeInterface
agit effectivement comme une interface; Il ne fournit aucun détail de mise en œuvre, seulement les méthodes requises pour les classes qui souhaitent se conformer au concept de "forme".
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!