Bonjour a tous...
Peut etre une question de newbie mais je n'ai pas reussi à trouver de
réponse, surement que j'utilise les mauvais termes...
Voila j'ai une classe A qui a comme attribut une classe B
class A:
def __init__(self):
self.valeur="test A"
self.b=B()
class B:
def __init__(self):
self.valeur="test B"
comment faire pour récupérer A.valeur directement depuis B ?
faut il forcement, lors de l'instanciation de B, indiquer un lien vers A
? (self.B.A = self par exemple)
ou y a t il un moyen plus classe de trouver la classe 'parente' de B
directement?
voila, je suis sur que Python propose une solution pythonesque pour ca ;)
merci a tous
a+
Julien
Bonjour a tous...
Peut etre une question de newbie mais je n'ai pas reussi à trouver de
réponse, surement que j'utilise les mauvais termes...
Voila j'ai une classe A qui a comme attribut une classe B
class A:
def __init__(self):
self.valeur="test A"
self.b=B()
class B:
def __init__(self):
self.valeur="test B"
comment faire pour récupérer A.valeur directement depuis B ?
faut il forcement, lors de l'instanciation de B, indiquer un lien vers A
? (self.B.A = self par exemple)
ou y a t il un moyen plus classe de trouver la classe 'parente' de B
directement?
voila, je suis sur que Python propose une solution pythonesque pour ca ;)
merci a tous
a+
Julien
Bonjour a tous...
Peut etre une question de newbie mais je n'ai pas reussi à trouver de
réponse, surement que j'utilise les mauvais termes...
Voila j'ai une classe A qui a comme attribut une classe B
class A:
def __init__(self):
self.valeur="test A"
self.b=B()
class B:
def __init__(self):
self.valeur="test B"
comment faire pour récupérer A.valeur directement depuis B ?
faut il forcement, lors de l'instanciation de B, indiquer un lien vers A
? (self.B.A = self par exemple)
ou y a t il un moyen plus classe de trouver la classe 'parente' de B
directement?
voila, je suis sur que Python propose une solution pythonesque pour ca ;)
merci a tous
a+
Julien
Bonjour a tous...
Peut etre une question de newbie mais je n'ai pas reussi à trouver de
réponse, surement que j'utilise les mauvais termes...
Voila j'ai une classe A qui a comme attribut une classe B
class A:
def __init__(self):
self.valeur="test A"
self.b=B()
class B:
def __init__(self):
self.valeur="test B"
comment faire pour récupérer A.valeur directement depuis B ?
faut il forcement, lors de l'instanciation de B, indiquer un lien vers A
? (self.B.A = self par exemple)
ou y a t il un moyen plus classe de trouver la classe 'parente' de B
directement?
Bonjour a tous...
Peut etre une question de newbie mais je n'ai pas reussi à trouver de
réponse, surement que j'utilise les mauvais termes...
Voila j'ai une classe A qui a comme attribut une classe B
class A:
def __init__(self):
self.valeur="test A"
self.b=B()
class B:
def __init__(self):
self.valeur="test B"
comment faire pour récupérer A.valeur directement depuis B ?
faut il forcement, lors de l'instanciation de B, indiquer un lien vers A
? (self.B.A = self par exemple)
ou y a t il un moyen plus classe de trouver la classe 'parente' de B
directement?
Bonjour a tous...
Peut etre une question de newbie mais je n'ai pas reussi à trouver de
réponse, surement que j'utilise les mauvais termes...
Voila j'ai une classe A qui a comme attribut une classe B
class A:
def __init__(self):
self.valeur="test A"
self.b=B()
class B:
def __init__(self):
self.valeur="test B"
comment faire pour récupérer A.valeur directement depuis B ?
faut il forcement, lors de l'instanciation de B, indiquer un lien vers A
? (self.B.A = self par exemple)
ou y a t il un moyen plus classe de trouver la classe 'parente' de B
directement?
effectivement, tu n'as pas de lien d'héritage entre tes classes donc pas
de classe parente.
A n'est pas la classe parente de B. Tu as à la rigueur un lien
d'aggrégation entre les classes mais pas un lien d'héritage, tu ne peux
pas accéder à la classe A depuis la classe B.
En général, ce genre de problèmes peuvent être le signe d'une mauvaise modélisation.
effectivement, tu n'as pas de lien d'héritage entre tes classes donc pas
de classe parente.
A n'est pas la classe parente de B. Tu as à la rigueur un lien
d'aggrégation entre les classes mais pas un lien d'héritage, tu ne peux
pas accéder à la classe A depuis la classe B.
En général, ce genre de problèmes peuvent être le signe d'une mauvaise modélisation.
effectivement, tu n'as pas de lien d'héritage entre tes classes donc pas
de classe parente.
A n'est pas la classe parente de B. Tu as à la rigueur un lien
d'aggrégation entre les classes mais pas un lien d'héritage, tu ne peux
pas accéder à la classe A depuis la classe B.
En général, ce genre de problèmes peuvent être le signe d'une mauvaise modélisation.
Comme ceci peut-être ...
class A(object):
def __init__(self):
self.valeur = "test A"
self.b = B(self)
class B(object):
def __init__(self,parent):
self.parent = parent
self.valeur = "test B"
def getParentValue(self):
return self.parent.valeur
a = A()
print a.b.getParentValue() --> renvoie "test A"
Comme ceci peut-être ...
class A(object):
def __init__(self):
self.valeur = "test A"
self.b = B(self)
class B(object):
def __init__(self,parent):
self.parent = parent
self.valeur = "test B"
def getParentValue(self):
return self.parent.valeur
a = A()
print a.b.getParentValue() --> renvoie "test A"
Comme ceci peut-être ...
class A(object):
def __init__(self):
self.valeur = "test A"
self.b = B(self)
class B(object):
def __init__(self,parent):
self.parent = parent
self.valeur = "test B"
def getParentValue(self):
return self.parent.valeur
a = A()
print a.b.getParentValue() --> renvoie "test A"
C'est mal parti: tes classes n'ont aucun attribut. Ce sont leurs
instances qui auront des attributs, pas les classes elles-mêmes. Tu
sembles mélanger les notions de classe et d'objet. Es-tu au point
là-dessus?
On peut plus ou moins dire ça comme ça, mais certainement pas faire ce
que tu indiques là... Si l'instance de B a besoin de manipuler
l'instance de A à partir de laquelle elle a été créée, voilà ce que je
ferais:
class A(object):
def __init__(self):
self.valeur = "test A"
self.b = B(self)
class B(object):
def __init__(self, a_parent):
self.a_parent = a_parent
self.valeur = "test B"
Dans ce cas, dans une instance de B, tu pourras accéder à la valeur de
l'instance parente via self.a_parent.valeur.
C'est mal parti: tes classes n'ont aucun attribut. Ce sont leurs
instances qui auront des attributs, pas les classes elles-mêmes. Tu
sembles mélanger les notions de classe et d'objet. Es-tu au point
là-dessus?
On peut plus ou moins dire ça comme ça, mais certainement pas faire ce
que tu indiques là... Si l'instance de B a besoin de manipuler
l'instance de A à partir de laquelle elle a été créée, voilà ce que je
ferais:
class A(object):
def __init__(self):
self.valeur = "test A"
self.b = B(self)
class B(object):
def __init__(self, a_parent):
self.a_parent = a_parent
self.valeur = "test B"
Dans ce cas, dans une instance de B, tu pourras accéder à la valeur de
l'instance parente via self.a_parent.valeur.
C'est mal parti: tes classes n'ont aucun attribut. Ce sont leurs
instances qui auront des attributs, pas les classes elles-mêmes. Tu
sembles mélanger les notions de classe et d'objet. Es-tu au point
là-dessus?
On peut plus ou moins dire ça comme ça, mais certainement pas faire ce
que tu indiques là... Si l'instance de B a besoin de manipuler
l'instance de A à partir de laquelle elle a été créée, voilà ce que je
ferais:
class A(object):
def __init__(self):
self.valeur = "test A"
self.b = B(self)
class B(object):
def __init__(self, a_parent):
self.a_parent = a_parent
self.valeur = "test B"
Dans ce cas, dans une instance de B, tu pourras accéder à la valeur de
l'instance parente via self.a_parent.valeur.
effectivement, tu n'as pas de lien d'héritage entre tes classes donc
pas de classe parente.
A n'est pas la classe parente de B. Tu as à la rigueur un lien
d'aggrégation entre les classes mais pas un lien d'héritage, tu ne
peux pas accéder à la classe A depuis la classe B.
ok, c'est clair, en effet je m'exprime mal c'est un simple lien
d'aggrégation entre deux classes 100% distinctesEn général, ce genre de problèmes peuvent être le signe d'une
mauvaise modélisation.
j'ai une classe globale, qui contient des variables (attributs) et
certains de ces attributs sont d'autres classes.
ex :
class MonServeur:
def __init__(self):
self.params = {}
self.http_server = HttpServer()
comment faire pour que http_server puisse utiliser des parametres
définis par ma classe 'principale' ? sinon comment faire autrement ?
Merci pour les precisions
Julien
effectivement, tu n'as pas de lien d'héritage entre tes classes donc
pas de classe parente.
A n'est pas la classe parente de B. Tu as à la rigueur un lien
d'aggrégation entre les classes mais pas un lien d'héritage, tu ne
peux pas accéder à la classe A depuis la classe B.
ok, c'est clair, en effet je m'exprime mal c'est un simple lien
d'aggrégation entre deux classes 100% distinctes
En général, ce genre de problèmes peuvent être le signe d'une
mauvaise modélisation.
j'ai une classe globale, qui contient des variables (attributs) et
certains de ces attributs sont d'autres classes.
ex :
class MonServeur:
def __init__(self):
self.params = {}
self.http_server = HttpServer()
comment faire pour que http_server puisse utiliser des parametres
définis par ma classe 'principale' ? sinon comment faire autrement ?
Merci pour les precisions
Julien
effectivement, tu n'as pas de lien d'héritage entre tes classes donc
pas de classe parente.
A n'est pas la classe parente de B. Tu as à la rigueur un lien
d'aggrégation entre les classes mais pas un lien d'héritage, tu ne
peux pas accéder à la classe A depuis la classe B.
ok, c'est clair, en effet je m'exprime mal c'est un simple lien
d'aggrégation entre deux classes 100% distinctesEn général, ce genre de problèmes peuvent être le signe d'une
mauvaise modélisation.
j'ai une classe globale, qui contient des variables (attributs) et
certains de ces attributs sont d'autres classes.
ex :
class MonServeur:
def __init__(self):
self.params = {}
self.http_server = HttpServer()
comment faire pour que http_server puisse utiliser des parametres
définis par ma classe 'principale' ? sinon comment faire autrement ?
Merci pour les precisions
Julien
C'est mal parti: tes classes n'ont aucun attribut. Ce sont leurs
instances qui auront des attributs, pas les classes elles-mêmes. Tu
sembles mélanger les notions de classe et d'objet. Es-tu au point
là-dessus?
Je pense être plus au point en codant qu'en l'expliquant lol ;)On peut plus ou moins dire ça comme ça, mais certainement pas faire ce
que tu indiques là... Si l'instance de B a besoin de manipuler
l'instance de A à partir de laquelle elle a été créée, voilà ce que je
ferais:
class A(object):
def __init__(self):
self.valeur = "test A"
self.b = B(self)
class B(object):
def __init__(self, a_parent):
self.a_parent = a_parent
self.valeur = "test B"
Dans ce cas, dans une instance de B, tu pourras accéder à la valeur de
l'instance parente via self.a_parent.valeur.
Ok c'est ce que je fais actuellement mais je me demandais s'il n'y avait
un truc magique en python comme on en trouve souvent ;)
j'imaginais un __parentclass__
ou quelque chose comme ca mais je dois
rever eveillé
C'est mal parti: tes classes n'ont aucun attribut. Ce sont leurs
instances qui auront des attributs, pas les classes elles-mêmes. Tu
sembles mélanger les notions de classe et d'objet. Es-tu au point
là-dessus?
Je pense être plus au point en codant qu'en l'expliquant lol ;)
On peut plus ou moins dire ça comme ça, mais certainement pas faire ce
que tu indiques là... Si l'instance de B a besoin de manipuler
l'instance de A à partir de laquelle elle a été créée, voilà ce que je
ferais:
class A(object):
def __init__(self):
self.valeur = "test A"
self.b = B(self)
class B(object):
def __init__(self, a_parent):
self.a_parent = a_parent
self.valeur = "test B"
Dans ce cas, dans une instance de B, tu pourras accéder à la valeur de
l'instance parente via self.a_parent.valeur.
Ok c'est ce que je fais actuellement mais je me demandais s'il n'y avait
un truc magique en python comme on en trouve souvent ;)
j'imaginais un __parentclass__
ou quelque chose comme ca mais je dois
rever eveillé
C'est mal parti: tes classes n'ont aucun attribut. Ce sont leurs
instances qui auront des attributs, pas les classes elles-mêmes. Tu
sembles mélanger les notions de classe et d'objet. Es-tu au point
là-dessus?
Je pense être plus au point en codant qu'en l'expliquant lol ;)On peut plus ou moins dire ça comme ça, mais certainement pas faire ce
que tu indiques là... Si l'instance de B a besoin de manipuler
l'instance de A à partir de laquelle elle a été créée, voilà ce que je
ferais:
class A(object):
def __init__(self):
self.valeur = "test A"
self.b = B(self)
class B(object):
def __init__(self, a_parent):
self.a_parent = a_parent
self.valeur = "test B"
Dans ce cas, dans une instance de B, tu pourras accéder à la valeur de
l'instance parente via self.a_parent.valeur.
Ok c'est ce que je fais actuellement mais je me demandais s'il n'y avait
un truc magique en python comme on en trouve souvent ;)
j'imaginais un __parentclass__
ou quelque chose comme ca mais je dois
rever eveillé
En général, ce genre de problèmes peuvent être le signe d'une
mauvaise modélisation.
j'ai une classe globale,
qui contient des variables (attributs)
et
certains de ces attributs sont d'autres classes.
ex :
class MonServeur:
def __init__(self):
self.params = {}
self.http_server = HttpServer()
comment faire pour que http_server puisse utiliser des parametres
définis par ma classe 'principale' ?
sinon comment faire autrement ?
En général, ce genre de problèmes peuvent être le signe d'une
mauvaise modélisation.
j'ai une classe globale,
qui contient des variables (attributs)
et
certains de ces attributs sont d'autres classes.
ex :
class MonServeur:
def __init__(self):
self.params = {}
self.http_server = HttpServer()
comment faire pour que http_server puisse utiliser des parametres
définis par ma classe 'principale' ?
sinon comment faire autrement ?
En général, ce genre de problèmes peuvent être le signe d'une
mauvaise modélisation.
j'ai une classe globale,
qui contient des variables (attributs)
et
certains de ces attributs sont d'autres classes.
ex :
class MonServeur:
def __init__(self):
self.params = {}
self.http_server = HttpServer()
comment faire pour que http_server puisse utiliser des parametres
définis par ma classe 'principale' ?
sinon comment faire autrement ?
"certains de ces attributs sont d'autres classes"
=> d'autres instances de classes j'imagine ?
Si oui c'est un peu le cas de tous les attributs dans un langage objet.
Ta classe principale est MonServeur c'est ça ?
Je dirais naïvement au vu de ces informations qu'il est possible que ton
serveur soit une spécialisation d'un serveur Http auquel cas tu peux
définir un vrai lien d'héritage
class MonServeur(HttpServer):
Sinon, à la création de l'instance self.http_server, tu peux passer au
constructeur les paramètres dont tu auras besoin pour configurer ton
serveur Http.
self.http_server = HttpServer(self.params.port, self.params.host)
"certains de ces attributs sont d'autres classes"
=> d'autres instances de classes j'imagine ?
Si oui c'est un peu le cas de tous les attributs dans un langage objet.
Ta classe principale est MonServeur c'est ça ?
Je dirais naïvement au vu de ces informations qu'il est possible que ton
serveur soit une spécialisation d'un serveur Http auquel cas tu peux
définir un vrai lien d'héritage
class MonServeur(HttpServer):
Sinon, à la création de l'instance self.http_server, tu peux passer au
constructeur les paramètres dont tu auras besoin pour configurer ton
serveur Http.
self.http_server = HttpServer(self.params.port, self.params.host)
"certains de ces attributs sont d'autres classes"
=> d'autres instances de classes j'imagine ?
Si oui c'est un peu le cas de tous les attributs dans un langage objet.
Ta classe principale est MonServeur c'est ça ?
Je dirais naïvement au vu de ces informations qu'il est possible que ton
serveur soit une spécialisation d'un serveur Http auquel cas tu peux
définir un vrai lien d'héritage
class MonServeur(HttpServer):
Sinon, à la création de l'instance self.http_server, tu peux passer au
constructeur les paramètres dont tu auras besoin pour configurer ton
serveur Http.
self.http_server = HttpServer(self.params.port, self.params.host)