• # Stout bête

    Posté par (site web personnel) . En réponse au message [Java -> Python] Implémentation d'interface "en ligne". Évalué à 6.

    S'il n'y a pas d'interface formelle[*] en Python c'est parce qu'on raisonne en terme de duck-typing, ce n'est pas à cause de la dérivation multiple.

    Ton interface dans l'absolu c'est juste un callable (un truc qui s'appelle comme une fonction). Tu peux faire un truc comme ça:

    class Courbe(object):
     def __init__(self, f):
     self.f = f
    def main():
     [...]
     c = Courbe(lambda u: u * u)
     [...]

    Ou bien avec une "vraie" fonction (que je définis bien ici depuis l'intérieur d'une autre fonction, comme toi):

    def main():
     [...]
     def foobar(u):
     return u * u
     c = Courbe(foobar)
     [...]

    Voire même avec une classe qui définit la méthode __call__ et peut donc être appelée comme une fonction:

    def main():
     [...]
     class Foobar(object):
     def __call__(self, u):
     return u * u
     c = Courbe(Foobar())
     [...]

    (évidemment si tu tiens vraiment à ta méthode 'eval' tu peux modifier mon dernier exemple, mais je trouve ça moins pythonique).

    [*] Ce qui n'est plus tout à fait vrai: https://docs.python.org/release/2.7/library/abc.html#module-abc