• [^] # Re: A quand l'équivalent des symboles Ruby en Python ?

    Posté par (site web personnel) . En réponse à la dépêche Python 3.4 est sorti avec 7 nouveaux modules. Évalué à 7.

    Dans ce cas, présis, ça a un sens d'avoir un entier associé avec le niveau de log. Tu peux ainsi définir assez facilement la notion de "tous les messages avec un niveau de log supérieur à ERROR" (ERROR + FATAL), "tous les messages avec un niveau de log supérieur à INFO" ( = INFO + WARNING + ERROR + FATAL).

    Cela dit, ton besoin d'un symbole abstrait (si je l'ai bien compris) est justement couvert par l'ajout du module Enum à Python 3.4 :

    >>> from enum import Enum
    >>> Animal = Enum('Animal', 'ant bee cat dog')
    >>> myPet = Animal.ant
    >>> yourPet = Animal.beee
    Traceback (most recent call last):
     File "<pyshell#7>", line 1, in <module>
     yourPet = Animal.beee
     File "C:\Python34\lib\enum.py", line 236, in __getattr__
     raise AttributeError(name) from None
    AttributeError: beee
    >>> 
    

    Et tu gagnes en plus une vérification syntaxique à l'assignation de ta variable et non pas à son utilisation...

    Pour reprendre ton exemple plus haut en ruby, par exemple, si tu remplaces :WARNING par :WAAAARNING, l'erreur ne sera visible que au niveau du h.setLevel(i) et pas lors de l'énumération des champs possibles.

    Si Python utilisais un Enum pour gérer ça, tu aurais un logging.LogLevels = Enum('DEBUG', 'INFO', 'WARNING', 'ERROR' ) et tu pourrais faire :

    for i in logging.LogLevels:
     ...
    

    Mais globalement, si on regarde ça d'un peu plus haut, les différences sont globalement mineures et ne transforment pas massivement ni l'expressivité, ni la fonctionnalité dans un langage ou dans un autre.

    Bref, c'est de l'enc******* de mouche .