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 :

Classes paramétrées en Python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut Classes paramétrées en Python
    Bonjour tout le monde !
    Je voudrais savoir comment en Python réaliser l'équivalent des classes 'template' de C++. J'ai cherché demandé à notre ami Google 'Python template' mais les réponses n'ont apparemment rien à voir avec les classes paramétrées.
    Je vais donner un exemple.
    Je veux modéliser les corps Z/pZ pour p premier d'un seul coup.
    Je sais modéliser Z/2Z, Z/3/Z, Z/5Z.
    Je sais aussi utiliser une variable globale p au niveau du fichier d'implémentation de la classe Z/pZ mais ça c'est vraiment 'quick and dirty', si je veux faire des calculs simultanément dans Z/2Z et Z/3Z vous voyez le problème ...
    Quelqu'un a une idée plus 'clean' ?
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Et pourquoi ne pas passer "p" en tant que paramètre du constructeur de la classe représentant ces ensembles ?

  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Parce que dans la même classe tu vas avoir des instances de Z/2Z et de Z/3Z, je sais multiplier entre eux des éléments de Z/2Z ou de Z/3Z mais le produit d'un élément de Z/2Z par un autre de Z/3Z c'est quoi ???
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Après un petit tour sur wiki ... le problème est que la loi multiplicative est une loi de composition interne à la structure d'anneau ?
    Et donc le produit Z/2Z * Z/3Z n'est pas défini ?

    Si c'est bien ça, il reste possible de vérifier que l'opération a un sens au sein de l'opérateur utilisé en comparant la valeur du paramètre "p" des deux instances constituant les deux opérandes de l'opérateur "*".
    Si elle n'en a pas il suffit de lever une exception ou renvoyer "None".

  5. #5
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Merci, mais en tant qu'algébriste je connais tout ça.
    Après un petit tour sur wiki ... le problème est que la loi multiplicative est une loi de composition interne à la structure d'anneau ?
    Et donc le produit Z/2Z * Z/3Z n'est pas défini
    Au passage le produit Z/2Z * Z/3Z est parfaitement défini, ce qui n'est pas défini c'est le produit d'un élément de Z/2Z par un élément de Z/3Z
    Mon problème n'est pas mathématique...
    Je n'ai donné ceci que comme exemple.
    Mon problème est comment crée-t-on des classes paramétrées en Python ?
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  6. #6
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Salut

    Python n'offre pas de construction similaire au templates du C++ ou generics de Java, car il n'en a pas besoin.

    On peut virtuellement passer n'importe quel type d'argument à une fonction. C'est à la fonction de réagir en selon le type.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    >>> class Z1: pass
    ... 
    >>> class Z2: pass
    ... 
    >>> def test(arg):
    ...     if isinstance(arg, Z1):
    ...         print("C'est un Z1")
    ...     elif isinstance(arg, Z2):
    ...         print("C'est un Z2")
    ... 
    >>> z1 = Z1()
    >>> z2 = Z2()
    >>> test(z1)
    C'est un Z1
    >>> test(z2)
    C'est un Z2
    Vois aussi les méthodes type et issubclass.

    Mais il y a mieux que la méthode ci-dessus, quand tu peux utiliser la surcharge des opérateurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    >>> class Z1:
    ...     def __init__(self, val):
    ...         self.__val = val
    ...     def __div__(self, divider):
    ...         return self.__val / divider
    ... 
    >>> class Z2:
    ...     def __init__(self, val):
    ...         self.__val = val
    ...     def __div__(self, divider):
    ...         return (self.__val / divider) * 2
    ... 
    >>> z1 = Z1(20)
    >>> z2 = Z2(20)
    >>> def test(arg):
    ...     return arg / 4
    ... 
    >>> test(z1)
    5
    >>> test(z2)
    10
    Mais si tu cherches une solution pour implémenter ces templates avec l'API C de Python, il te suffit de réadapter la solution ci-dessus au C.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Diagram Class paramètres entrées non visibles
    Par betsprite dans le forum BOUML
    Réponses: 2
    Dernier message: 18/11/2010, 21h04
  2. Copie profonde sur classe paramétrée
    Par lepak dans le forum Langage
    Réponses: 3
    Dernier message: 07/10/2010, 16h46
  3. apelle en C à partir d'une classe faite en python
    Par julien25 dans le forum Interfaçage autre langage
    Réponses: 4
    Dernier message: 16/03/2009, 22h24
  4. classe osv dans python
    Par fouberge dans le forum Général Python
    Réponses: 2
    Dernier message: 28/08/2008, 12h46
  5. classes abstraites en Python?
    Par areuh_fr dans le forum Général Python
    Réponses: 5
    Dernier message: 07/04/2007, 13h04

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