Quantcast
Channel: AFPy's Planet
Viewing all articles
Browse latest Browse all 3409

python: ellipsis operator (...)

$
0
0

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


Viewing all articles
Browse latest Browse all 3409

Trending Articles