Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Licence CC BY-NC-ND Thierry Parmentelat & Arnaud Legout Inria - UCA

Exercice - niveau intermédiaire

On se propose d’écrire une classe de redirection ; typiquement, une instance de cette classe est capable de résoudre n’importe quel attribut car son travail est de sous-traiter le travail à quelqu’un d’autre.

L’exercice vient en deux versions ; dans la première on considère seulement des attributs de données, dans la seconde, un attribut inconnu se comporte comme une méthode.

Première version : attributs de donnée

Dans cette premiere version, on veut créer une instance à partir de laquelle on peut accéder à n’importe quel attribut dont le nom est un nom de variable légal en Python.

Et la valeur de l’attribut est dérivé de son nom en :

from corrections.cls_redirectors import exo_redirector1
exo_redirector1.example()
Loading...
# votre code pour la classe Redirector1
class Redirector1:

    def __repr__(self):
        return "redirector"

    ...
# pour la corriger
# 
exo_redirector1.correction(Redirector1)
Loading...

Exercice - niveau avancé

deuxième version : méthodes

Cette fois-ci on considère qu’un attribut manquant est une méthode ; pour fixer les idées on décide que :

Ce mécanisme est illustré sur les exemples suivants, avec deux méthodes foo et bar ; par contre le test automatique exercera votre code avec des noms de méthodes aléatoires.

from corrections.cls_redirectors import exo_redirector2
exo_redirector2.example()
Loading...
# à vous de jouer
class Redirector2:
    def __init__(self, id):
        self.id = id
    def __repr__(self):
        return f"Redirector2({self.id})"
# pour corriger
exo_redirector2.correction(Redirector2)
Loading...

application

Un exemple en vraie grandeur de ce type de mécanisme est proposé dans la librairie standard Python : https://docs.python.org/3/library/xmlrpc.client.html#serverproxy-objects.

Typiquement la classe générique ServerProxy ressemble à notre deuxième version de l’exercice, en ce sens qu’elle n’a aucune connaissance de l’API distante à laquelle elle est connectée ; autrement dit l’ensemble des méthodes effectivement proposées par la classe ServerProxy est totalement inconnu au moment où on écrit le code de cette classe.