[Python] Association de classes
bbakeroo
Messages postés
2200
Statut
Membre
-
bbakeroo Messages postés 2200 Statut Membre -
bbakeroo Messages postés 2200 Statut Membre -
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
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
A voir également:
- [Python] Association de classes
- Citizen code python - Accueil - Outils
- Mysql error in file: /engine/classes/mysql.php at line 53 ✓ - Forum Réseaux sociaux
- Telecharger logiciel de gestion d'association gratuit - Télécharger - Gestion de projets
- Association avec le server freebox en cours freeplug vert - Forum Freebox
- Dcb association 6868 - Forum Téléphones & tablettes Android
4 réponses
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
- 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
- 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:
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....
- 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....
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.
Puis dans le __init__ tu enlèves le self.versions = [] qui ne sert plus à rien sinon annuler ce qu'a fait __new__
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__