[Python] Association de classes

Fermé
bbakeroo Messages postés 2197 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 10 juin 2007 - 16 janv. 2007 à 13:59
bbakeroo Messages postés 2197 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 10 juin 2007 - 23 janv. 2007 à 06:55
Bonjour,

Je cale sur une difficulté maintes fois repertoriée (je sais), mais ....

Voila. Je crée deux classes en Python. Je souhaite pouvoir le associées autrement que par héritage :

Par exemple :

class Application:
def__init__(self, Description, Importance, Marche, Offre_commerciale, Vocation, Date_cre, Dat_mod)
self.Description = Description
self.Importance = Importance
self.Marche = Marche
self.Offre_commerciale = Offre_commerciale
self.Vocation = Vocation
self.Date_cre = Date_cre
self.Date_mod = Date_mod

class App_version:
def__init__(self, Description, Date_version, Date_mep)
self.Description = Description
self.Date_version = Date_version
self.Date_mep = Date_mep

pour les parties déclarative.

Maintenant en terme de règle je peux :

- avoir une application sans version
- une seule version liée à une seule application à un instant 't'
- avoir une version sans application

merci de votre aide

4 réponses

bbakeroo Messages postés 2197 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 10 juin 2007 71
16 janv. 2007 à 15:52
Après reflexion disons que :

- Je ne peux avoir une instance de version sans une instance application (et une seule)

- Je dois avoir une instance application avec une ou plus instance de version

0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
16 janv. 2007 à 17:18
- Je ne peux avoir une instance de version sans une instance application (et une seule)

- Je dois avoir une instance application avec une ou plus instance de version


Tu peux utiliser la composition.
Un objet Application possède une collection (une liste en python) de App_Version.

Et après tu peux très bien passer la référence de l'objet Application en cours dans l'App_Version que tu viens d'instancier:

class Application:
    def__init__(self, Description, Importance, Marche, Offre_commerciale,   Vocation, Date_cre, Dat_mod)
        self.Description = Description
        self.Importance = Importance
        self.Marche = Marche
        self.Offre_commerciale = Offre_commerciale
        self.Vocation = Vocation
        self.Date_cre = Date_cre
        self.Date_mod = Date_mod

        #Tes versions
        self.versions = []

     # A toi de valider les paramètres ici
     def addVersion(self, Description, Date_version, Date_mep):
        version = App_version(self, Description, Date_version, Date_mep)
        self.versions.append(version)

class App_version:
    def__init__(self, App, Description, Date_version, Date_mep)
        self.Description = Description
        self.Date_version = Date_version
        self.Date_mep = Date_mep
        #Vérifier le paramètre App...
        self.App = App

Il faut quand même voir que tes contraintes tournent en rond. Selon tes conditions, l'un ne peut pas être instancié sans l'autre.... Il faut bien que l'un soit invalide (qu'il existe sans l'autre) pendant ne serait-ce qu'un instant....
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
16 janv. 2007 à 17:36
Bon en fait tu peux faire ça en surchargeant la méthode __new__ qui construit l'instance d'une classe. Mais il faudra décider d'une première version par défaut pour chaque application.

class Application:
    def __new__(classe):
        instance = object.__new__(classe)
        instance.versions = []
        default_version = App_version( instance, cquetuveux, cquetuveux, cquetuveux)
        instance.versions.append(default_version)
        return instance

Puis dans le __init__ tu enlèves le self.versions = [] qui ne sert plus à rien sinon annuler ce qu'a fait __new__
0
bbakeroo Messages postés 2197 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 10 juin 2007 71
23 janv. 2007 à 06:55
Merci kilian,

je creuse tout ca et te tiens au courant de la suite.

Je pense qu'effectivement :

self.versions = []

est plus approprié à mes attentes.

encore milles merci.

a+
0