• 4 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 02/05/2018

Découvrez les méthodes spéciales

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

 

Dans ce chapitre vous ajouterez une nouvelle fonctionnalité au programme ! Vous serez en mesure d'afficher le nombre de parlementaires que contient votre fichier CSV en ajoutant l'argument  --info . Comme ceci : 

$ python parite.py -d current_mps.csv -e csv --info

Allons-y !

 

Calculer le nombre de parlementaires

Calculer le nombre de parlementaires est assez simple. Puisque dataframe est un tableau, vous pouvez utiliser la fonction len() pour en calculer le nombre d'items. Comme ceci :

csv.py

class SetOfParliamentMember:
    ...
    def total_mps(self):
        return len(self.dataframe)

def launch_analysis(data_file, info=False):
    sopm = SetOfParliamentMember("All MPs")
    ...

    if info:
        print(sopm.total_mps())

 

parite.py

def parse_arguments():
    ...
    parser.add_argument("-i","--info", action='store_true', help="""information about
    the file""")

...
if __name__ == '__main__':
    ...
    else:
        if args.extension == 'xml':
            x_an.launch_analysis(datafile)
        elif args.extension == 'csv':
            c_an.launch_analysis(datafile, args.info)
    finally:
        lg.info('#################### Analysis is over ######################')

Vous pourriez bien sûr vous contenter de créer une nouvelle méthode et de l'imprimer... mais non. Vous utiliserez les méthodes spéciales car, comme leur nom l'indique, elles sont assez magiques ! Comme vous ! 🙂

 

Les méthodes spéciales

Chaque méthode du langage peut être vue comme un ensemble de pièces Légo qui forment un composant important : une échelle, le toit d'une maison, un mur en briques, ... Python met à votre disposition ces méthodes afin que vous puissiez aller plus vite en ne réinventant pas la roue. Après tout, nous avons très souvent besoin de calculer le nombre d'éléments que contient une liste par exemple. Mais que faire lorsque vous voulez adapter cette méthode à vos besoins ? Et si vous pouviez la changer ?

😱  Es-tu en train de me dire que je peux recoder Python si je le souhaite ?

D'une certaine manière... Vous pouvez modifier très simplement un ensemble de méthodes du langage en utilisant les fameuses méthodes spéciales.

 

Comment utiliser les méthodes spéciales ?

Que se passe-t-il lorsque vous utilisez la fonction len() ? L'interpréteur Python utilise la méthode spéciale __len__() pour renvoyer le résultat attendu. C'est cette méthode que vous pouvez modifier en la réécrivant dans votre script. Démonstration :

>>> class Hack:
...    def __len__(self):
...        print('Wow, I just hacked Python!')
...        return 5
...
>>> a = Hack()
>>> print(len(a))
Wow, I just hacked Python!
5

 

Assez génial, n'est-ce pas ?!

Avant tout, il faut savoir que les méthodes spéciales sont pensées pour être exécutées par l'interpréteur Python et non par vous. D'ailleurs, vous aurez certainement remarqué que je n'ai pas écrit a.__len__() dans l'exemple ci-dessus. J'ai écrit len(a) et l'interpréteur a trouvé la méthode __len__() tout seul. Vous n'écrivez pas objet.__len__() ! Vous écrivez len(objet) et si objet est une instance d'une classe que vous avez définie, alors Python appelle la méthode __len__() que vous avez implémentée.

Dans tous les cas, vous devez définir ces méthodes spéciales dans une classe ! 😉

 

La méthode spéciale __repr__()

Quelle méthode spéciale peut-on utiliser pour remplacer la méthode total_mps()? Je vous propose d'utiliser __repr__() qui est appelée lorsque vous souhaitez imprimer les informations d'un objet. Comme ceci :

>>> class Babar:
...     pass
...
>>> a = Babar()
>>> print(a) # appelle la méthode __repr__ sur l'instance de la classe Babar
<__main__.Babar object at 0x109fa9198>

 

En définissant la méthode spéciale   __repr()__ , voici ce qui s'affiche :

>>> class Babar:
...     def __repr__(self):
...         return "Je suis un éléphant très spécial"
...
>>> a = Babar()
>>> print(a)
Je suis un éléphant très spécial

 

Voici comment vous pouvez l'utiliser dans le projet :

csv.py

class SetOfParliamentMember:
    ...
    def __repr__(self):
        return "SetOfParliamentMember: {} members".format(len(self.dataframe))

def launch_analysis(data_file, info=False):
    sopm = SetOfParliamentMember("All MPs")
    sopm.data_from_csv(os.path.join("data", data_file))
    sopm.display_chart()

    if info:
        print(sopm)

 

Si vous lancez le script avec l'argument --info, vous verrez dans la console que le fichier contient 570 parlementaires.

 

Les autres méthodes spéciales

Python intègre de nombreuses autres méthodes spéciales qui vous faciliteront la vie !

Catégorie

Nom des méthodes spéciales

Représentation

__repr____str____format____bytes__

Conversion en nombre

__abs____bool____complex____int____float____hash____index__

Collections

__len____getitem____setitem____delitem____contains__

Itérateurs

__iter____reversed____next__

Création et destruction d'instances

_new____init____del__

Gestion des attributs

__getattr____getattribute____setattr____delattr____dir__

Comparaison

__lt__<__le__<=__eq__==__ne__!=__gt__>=__ge__>=

Opérateurs arithmétiques

__add__+__sub__-__mul__*__truediv__/__floordiv__//__mod__%__round__

 

Nous avons ajouté de nombreux exemples dans le code source de ce chapitre afin que vous puissiez voir les méthodes spéciales suivantes en action :

  • __len__

  • __contains__

  • __getitem__

  • __add__

  • __radd__

  • __lt__

  • __gt__

  • __getattr__

  • __setattr__

Elles nous permettent de réaliser les opérations suivantes :

  • Afficher un graphique par parti politique avec l'argument --byparty

  • Chercher un député par son nom avec l'argument --searchname

  • Trouver un député grâce à un index avec l'argument --index

  • Afficher les n plus grands groupes politiques avec l'argument --groupfirst n

 

A vous de jouer !

Cliquez sur ce lien

 

Code du chapitre

Retrouvez le code de ce chapitre en cliquant ici. 

 

Exemple de certificat de réussite
Exemple de certificat de réussite