IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

y a-t-il un support de types génériques pour python ?


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut y a-t-il un support de types génériques pour python ?
    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.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    Python est typé dynamiquement, à quoi bon ce genre de choses?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    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 ?

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Points : 923
    Points
    923
    Par défaut
    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)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    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...

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par silverhawk.os
    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...


    Est ce que tu peux apporter un peu plus d'explication. Car à premier vue on peut faire ça sans utiliser les mix-ins

  7. #7
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par silverhawk.os
    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...
    Pour info, depuis java 5, les types paramétrés sont en standard

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    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)

  9. #9
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 269
    Points
    269
    Par défaut
    ç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) !

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    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)

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    En somme tu veux décorer la super classe. A quoi te serviraient les types génériques?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    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 ?

  13. #13
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    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).

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    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++)...

  15. #15
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 269
    Points
    269
    Par défaut
    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.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    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

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/11/2013, 06h05
  2. Réponses: 0
    Dernier message: 10/07/2012, 10h22
  3. [C#] Type générique pour un Foreach
    Par lynchmaniac dans le forum C#
    Réponses: 2
    Dernier message: 05/11/2009, 09h31
  4. [PEAR][SOAP] Support des types de données complexes
    Par elendil dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/12/2007, 10h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo