Bonjour,
Je suis programmeur C++, et je m'intéresse au langage python.
Je voudrais savoir s'il existe un support de template (au sens c++ du terme) pour le langage python ?
Merci.
Bonjour,
Je suis programmeur C++, et je m'intéresse au langage python.
Je voudrais savoir s'il existe un support de template (au sens c++ du terme) pour le langage python ?
Merci.
Python est typé dynamiquement, à quoi bon ce genre de choses?
Pour faire du mixin par exemple :
template <class T> toto : public T
{
...
}
Peut-on faire la même chose en python sans passer par un mécanisme de template ?
Je doute que ce soit possible
Tu peux toujours encapsuler une variable et faire une "redirection" (définir les méthodes __getattr__() et autres pour qu'elles agissent sur cet objet plutôt que sur ton instance)
Ouaip, c'est ce que j'ai fait...
Mais le problème, c'est le typage de ma classe ! Je veux qu'elles appartiennent à la même hierarchie pour manipuler une interface... et profiter du polymorphisme...
C'est pour ça que je posais cette question...
Je sais qu'en java, les templates ne sont pas supportés de base, mais qu'il existe des extensions pour pallier au problème. Je me suis dit que ça pouvait être le cas en python...
Envoyé par silverhawk.os
Est ce que tu peux apporter un peu plus d'explication. Car à premier vue on peut faire ça sans utiliser les mix-ins
Pour info, depuis java 5, les types paramétrés sont en standardEnvoyé par silverhawk.os
OK.
J'ai deux classes A et B.
B est une classe qui modélise un certain comportement. Elle a plusieures méthodes.
Je voudrais que B s'auto-construise à partir de A :
- En parcourant les méthodes de A et en les surchargeant automatiquement.
- En dérivant de A pour profiter du polymorphisme de méthode.
Typiquement, un application directe de ça pourrait être du monitoring.
(déclenchement d'un chronomètre dans les méthodes surchargées par B puis appel aux méthodes de la classe de base, puis arrêt du chrono pour avoir le temps d'execution de chaque méthode de A). Mais on pourrait envisager d'autres applications.
En fait, c par curiosité que j'ai posé la question
Sinon, je ne savais pas pour le java 1.5 (ça fait pas mal de temps que j'ai pas codé en java)
ça ressemble à de la programmation par aspects ce que tu décris là. Je sais pas du tout ce qui est possible en python pour ce genre de problème.
Par contre, je vois pas le rapport entre les templates et ce que tu veux faire (monitoring) !
Je ne veux pas faire du monitoring forcément, c t juste un exemple.
Dans ce cas précis, l'utilisation de mix-in permettrait "d'ajouter" à volonter des fonctionnalités à une classe... tout en manipulant toujours le même type de base.
L'avantage du mix-in, c'est que je peux ajouter ou enlever des couches comme je veux.
Je peux par exemple avoir besoin d'ajouter ma "couche" pour "surveiller" mon temps d'execution de chacune de mes méthodes, puis une fois optimiser, enlever ma couche. (tout ça sans toucher au code ou presque)
En somme tu veux décorer la super classe. A quoi te serviraient les types génériques?
Je ne vois pas ce que tu entends par "décorer"...
Mais en gros, ce que je veux, c'est avoir une classe utilitaire qui puisse dériver de n'importe quelle classe en reproduisant ses méthodes dynamiquement, afin d'y ajouter une fonctionnalité...
Et les types génériques (templates) permettent ça (en tous cas en c++) : entre autre chose, le fait de dériver du type template passé en paramètre...
Donc ma question est la suivante : y a-t-il un moyen autre que les templates pour faire ça en python ?
template <class T> class Toto ; public T
{
void UneMethode()
{
// Traitement additionnel (pour des besoins de tests par ex
...
// Appel de la méthode originale
T::UneMethode();
}
}
(en C++, ce qui n'est pas possible, contrairement à python, c'est de reproduire les méthodes "UneMethode" de T dynamiquement dans Toto...)
Je ne sais pas si j'ai été plus clair ?
Quand je parlais de décorateur, je parlais du design pattern.
En gros tu hérite d'une classe et tu delegue ses méthodes
Exemple en pseudo code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Toto { mafonction() {} } class Tutu extends Toto { mafonction() { traitement super.mafonction() traitement } }
Ce qui est faisable en python, si Tutu hérites de Toto, tu appelles dans le corps de mafonction : Toto.mafonction(self).
Ok pour le design pattern.
Ouaip, mais maintenant, je voudrais étendre ça pour n'importe quelle classe, et dynamiquement en plus !
Parce que là, on se paluche le code à la main à chaque fois...
D'où l'utilisation d'un mécanisme particulier (qui se traduit par l'utilisation de template au c++)...
ok le coup des templates pour pouvoir décorer n'importe quelle classe.
Mais quid des fonctions ?
D'une classe à l'autre, tu auras des fonctions différentes non ?
Pour être vraiment générique, je pense qu'il faut passer par l'introspection.
Je sais pas trop en python, mais en java il y a pas mal de framework AOP (aspect oriented programming) qui permettent de faire ça.
Effectivement, pour construire dynamiquement une telle classe il faut passer par l'introspection : ça ne me pose pas de problème...
Ma question existencielle concerne plutot la partie template... :o
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager