J'ai découvert l'ellipsis operator de python (...
). Dans le contexte où je l'utilise, c'est équivalent à pass
, autrement dit ne rien faire. C'est utilisé principalement pour quand python attend qu'un bloc syntaxique soit rempli (corps d'une fonction, d'une boucle, …), mais qu'on a vraiment rien à y faire. Je trouve que ça permet de faire des interfaces plus élégantes.
fromabcimportABC,abstractmethodclassCarElementVisitor(ABC):@abstractmethoddefvisitBody(self,element):...@abstractmethoddefvisitEngine(self,element):...@abstractmethoddefvisitWheel(self,element):...@abstractmethoddefvisitCar(self,element):...
plutôt que
fromabcimportABC,abstractmethodclassCarElementVisitor(ABC):@abstractmethoddefvisitBody(self,element):raiseNotImplementedError@abstractmethoddefvisitEngine(self,element):raiseNotImplementedError@abstractmethoddefvisitWheel(self,element):raiseNotImplementedError@abstractmethoddefvisitCar(self,element):raiseNotImplementedError
La perte de l'exception n'est pas un problème car elle n'est de toute façon jamais lancé, abc
(Abstract Base Classes, module python ajoutant les notions de classes abstraites et d'interfaces s'occupant d'en lancer une automatiquement:
$ ipython
Python 3.10.6 (main, Aug 3 2022, 17:39:45) [GCC 12.1.1 20220730]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.4.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from abc import ABC, abstractmethod
...:
...: class CarElementVisitor(ABC):
...: @abstractmethod
...: def visitBody(self, element):
...: ...
...:
...: @abstractmethod
...: def visitEngine(self, element):
...: ...
...:
...: @abstractmethod
...: def visitWheel(self, element):
...: ...
...:
...: @abstractmethod
...: def visitCar(self, element):
...: ...
...:
In [2]: CarElementVisitor()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [2], in ()
----> 1 CarElementVisitor()
TypeError: Can't instantiate abstract class CarElementVisitor with abstract methods visitBody, visitCar, visitEngine, visitWheel
|
Commentaires :voir le flux Atomouvrir dans le navigateur