Je pense que tu as lu un peu vite, ou que je n'ai pas été assez clair.
Il se trouve que dans le cas particulier qui nous importe, l'interface Evaluable existe déjà à mon sens dans le langage, et c'est ce que j'appelle un callable (appelable comme une fonction donc). Je lui conseille donc de ne pas traduire le code Java trop bêtement en évitant de définir une nouvelle interface.
Mais comme je l'indique dans ma dernière phrase, il peut remplacer __call__ par eval (dans ce cas il faudra faire f.eval(1) et plus f(1) évidemment), et de même il pourrait rajouter des méthodes eval2 ou zigouigoui si il veut.
Ainsi que François l'explique au dessus, en général tu vas définir une classe AbstractMachin ou BaseBidulos, dans laquelle tu vas mettre des fonctions :
qui soulèvent une exception NotImplementedError
qui fournissent une implémentation de base (comme les Adapter de la lib standard Java si je me souviens bien).
un peu comme tu peux le faire en C++ et ses classes abstraites.
Il n'y a pas (à ma connaissance) de classe maitresse de toutes les autres
o=object()
Bon après rajouter des méthodes à un objet/classe ça arrive et parfois ça "sauve la vie", mais on le fait assez rarement.
[^] # Re: Stout bête
Posté par GuieA_7 (site web personnel) . En réponse au message [Java -> Python] Implémentation d'interface "en ligne". Évalué à 1.
Je pense que tu as lu un peu vite, ou que je n'ai pas été assez clair.
Il se trouve que dans le cas particulier qui nous importe, l'interface
Evaluableexiste déjà à mon sens dans le langage, et c'est ce que j'appelle un callable (appelable comme une fonction donc). Je lui conseille donc de ne pas traduire le code Java trop bêtement en évitant de définir une nouvelle interface.Mais comme je l'indique dans ma dernière phrase, il peut remplacer
__call__pareval(dans ce cas il faudra fairef.eval(1)et plusf(1)évidemment), et de même il pourrait rajouter des méthodeseval2ouzigouigouisi il veut.Ainsi que François l'explique au dessus, en général tu vas définir une classe AbstractMachin ou BaseBidulos, dans laquelle tu vas mettre des fonctions :
un peu comme tu peux le faire en C++ et ses classes abstraites.
Bon après rajouter des méthodes à un objet/classe ça arrive et parfois ça "sauve la vie", mais on le fait assez rarement.