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 :

Questions générales sur python et la POO


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Août 2014
    Messages : 40
    Points : 33
    Points
    33
    Par défaut Questions générales sur python et la POO
    Bonjour,

    J'ai une question basique sur la POO avec Python et je n'arrive pas à trouver d'exemple concret dans les différents tutoriaux.

    Mon problème

    J'ai 3 classes différentes :
    - Des zones
    - des matériaux
    - des coefficients

    Les zones sont définies par : Un nom (string), un nom de matériaux (string), une température (vecteur).
    Les matériaux sont définis par : Un nom (string, un coefficient (objet)
    Un coefficient est défini par : Un nom (string), une température (vecteur), un coeff (vecteur)

    Ce que j'essaye de faire c'est quelque chose dans le genre (Mat.(Zone.NomZone)).Alpha.Temp pour récupérer la température du matériaux de la zone NomZone.

    C'est possible en python ? Je vois pas mal d'exemple avec des boucles sur des listes ou des dictionnaires mais j'aimerais quelque chose de plus direct :o
    Désolé si la question est débile...

    Merci pour votre aide !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par coolpix77 Voir le message
    J'ai 3 classes différentes :
    - Des zones
    - des matériaux
    - des coefficients

    Les zones sont définies par : Un nom (string), un nom de matériaux (string), une température (vecteur).
    Les matériaux sont définis par : Un nom (string, un coefficient (objet)
    Un coefficient est défini par : Un nom (string), une température (vecteur), un coeff (vecteur)
    Si vos classes n'ont pas de relation entre elles, difficile de s'en sortir sauf à "itérer" ou passer par des dictionnaires.
    Et décider quelles relations créer entre vos classes est une étape de conception indépendante du langage qui produit un diagramme de classe (UML) ou un entity relationship diagram ou un modèle conceptuel de données (Meurise).

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Z:
        name = ''
        matériaux = None
     
    class M:
        name = ''
        coef = None
    Si l'attribut Z.matériaux est une chaine de caractères, on peut espérer qu'il existe une instance de M correspondante qu'on pourra trouver en itérant sur les "M" ou en le récupérant dans un dictionnaire.
    Créer une relation entre Z et M, c'est, par exemple, coller l'objet M correspondant au matériaux à la création d'un Z i.e. créer une relation *-->1 de Z vers les M. Dans ce cas, on pourra écrire "directement" z.matériaux.coeff.
    Mais trouver le M à la création ou plus tard lorsqu'on en a besoin passera toujours par itérer sur la collection, passer par un dict pour trouver le bon, ou passer par des patterns de construction ad hoc.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par coolpix77 Voir le message
    J'ai 3 classes différentes :
    - Des zones
    - des matériaux
    - des coefficients

    Les zones sont définies par : Un nom (string), un nom de matériaux (string), une température (vecteur).
    Les matériaux sont définis par : Un nom (string, un coefficient (objet)
    Un coefficient est défini par : Un nom (string), une température (vecteur), un coeff (vecteur)
    Bonjour

    Il faut partir du plus bas pour remonter vers le plus englobant. Donc t'as des coefficients, puis des matériaux qui englobent ces coefficients, puis des zones qui englobent ces matériaux
    Code python : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    class cCoeff(object):
        def __init__(self, nom, temp, coeff):
           self.nom=nom
           self.temp=temp
           self.vect=vect
        # __init__()
    # class cCoeff
     
    class cMater(object):
       def __init__(self, nom, coeff):
           self.nom=nom
           self.coeff=coeff
       # __init__()
    # class cMater
     
    class cZone(object):
        def __init__(self, nom, mater, temp):
            sef.nom=nom
            self.mater=mater
            self.temp=temp
        # __init__()
    # class cZone
     
    montruc=cZone(
        nom="zoneA",
        mater=cMater(
            nom="materiau A",
            coeff=cCoeff(
                nom="coeffA",
                temp=37.5,
                coeff=12.45,
            ),
        ),
        temp=45,
    )
     
    print monTruc.mater.coeff.temp     # Donnera 37.5
    print monTruc.temp                      # Donnera 45

    Bon c'est pas super protégé (les membres sont tous accessibles et modifiables depuis l'extérieur) mais c'est déjà une base. Accessoirement tu remarqueras que je ne passe pas par le nom parce que ça induirait de devoir implémenter une méthode d'association nom/coefficient (probablement dérivée d'un dico) ce qui serait plus lourd.

    PS: une méthode pour définir une classe avec membres protégés mais accessibles
    Code python : 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
    22
    23
    class cCoeff(object):
        def __getNom(self): return self.__nom
        nom=property(__getNom)
     
        def __getTemp(self): return self.__temp
        def __setTemp(self, t): self.__temp=t
        temp=property(__getTemp, __setTemp)
     
        def __init__(self, nom, temp):
           self.__nom=nom
           self.__temp=temp
        # __init__()
    # class cCoeff
     
    essai=cCoeff("truc", 500)
    print essai.nom   # Donnera "truc"
    essai.nom="autre chose" # Erreur car pas d'accesseur pour modifier le nom
     
    print essai.temp  # Donnera 500
    essai.temp=1000   # Ok
    print essai.temp  # Donnera 1000
     
    print essai.__temp   # Erreur, le membre "__temp" a été renommé pour ne pas être accessible depuis l'extérieur
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Question générales sur les IG en Java
    Par link182 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 18/02/2006, 11h42
  2. [LDAP] Questions générales sur LDAP
    Par guiguisi dans le forum Autres SGBD
    Réponses: 5
    Dernier message: 25/05/2005, 10h05
  3. questions générales sur Java Web Start
    Par Shiryu44 dans le forum JWS
    Réponses: 12
    Dernier message: 11/04/2005, 15h33
  4. question générale sur les conteneurs
    Par tut dans le forum C++
    Réponses: 6
    Dernier message: 01/09/2004, 10h11
  5. Question générale sur les affectations ?
    Par Clemaster dans le forum C++
    Réponses: 5
    Dernier message: 09/08/2004, 17h03

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