Retourner au contenu associé (entrée de forum : [Java -> Python] Implémentation d'interface "en ligne")
Posté par GuieA_7 (site web personnel) le 22 janvier 2015 à 00:12. 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:
__call__
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
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル
# Stout bête
Posté par GuieA_7 (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:
Ou bien avec une "vraie" fonction (que je définis bien ici depuis l'intérieur d'une autre fonction, comme toi):
Voire même avec une classe qui définit la méthode
__call__et peut donc être appelée comme une fonction:(é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