Je voulais étudier l'héritage multiple à l'aide de Python, que je découvre
et, en partant de l'exemple simple qui consiste à construire une cellule
graphique composée de deux widgets, respectivement de type "label"
et "entry".
Manquant de doc sur le sujet je suis parti de l'héritage simple et j'ai
essayé d'extrapoler. Mais ça ne marche pas. Dans le petit bout de code
ci-dessous l'initialisation du deuxième widget "écrase" celle du premier,
ne tient pas compte de l'incrémentation de colonne dans la méthode, et ne
présente donc que le deuxième widget. Quelqu'un pourrait-il me brancher sur
une doc ou des exemples. Merci d'avance.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
hg
card.lemoine wrote:
Merci. C'est très clair et tes propositions correspondent sensiblement à un essai antérieur. Mais je voulais essayer de pousser un peu le modèle objet et, concernant l'héritage multiple, j'ai du mal à en percevoir l'usage. Alain
Eric Brunel wrote:
"Composée de", donc ce n'est pas un héritage, mais une... composition.
Touché
ça me permet entre autres d'avoir deux classes, une de type HIM et l'autre de type "interne" de partager une troisième classe de type configuration ... mais bien sût, l'object confi pourrait être passé de l'une à l'autre.
hg
card.lemoine wrote:
Merci. C'est très clair et tes propositions correspondent sensiblement à
un essai antérieur. Mais je voulais essayer de pousser un peu le modèle
objet et, concernant l'héritage multiple, j'ai du mal à en percevoir
l'usage. Alain
Eric Brunel wrote:
"Composée de", donc ce n'est pas un héritage, mais une... composition.
Touché
ça me permet entre autres d'avoir deux classes, une de type HIM et l'autre
de type "interne" de partager une troisième classe de type
configuration ... mais bien sût, l'object confi pourrait être passé de
l'une à l'autre.
Merci. C'est très clair et tes propositions correspondent sensiblement à un essai antérieur. Mais je voulais essayer de pousser un peu le modèle objet et, concernant l'héritage multiple, j'ai du mal à en percevoir l'usage. Alain
Eric Brunel wrote:
"Composée de", donc ce n'est pas un héritage, mais une... composition.
Touché
ça me permet entre autres d'avoir deux classes, une de type HIM et l'autre de type "interne" de partager une troisième classe de type configuration ... mais bien sût, l'object confi pourrait être passé de l'une à l'autre.
hg
Eric Brunel
On Thu, 25 Jan 2007 11:46:39 +0100, card.lemoine wrote:
Bonjour,
Je voulais étudier l'héritage multiple à l'aide de Python, que je découvre et, en partant de l'exemple simple qui consiste à construire une cellule graphique composée de deux widgets, respectivement de type "label" et "entry".
"Composée de", donc ce n'est pas un héritage, mais une... composition. Chacune de tes cellules comporte à la fois un Label, et une Entry. Si tu hérites des deux, tu dis que ta cellule *est* à la fois un Label et une Entry, ce qui n'est pas la même chose du tout. Utilisant moi-même très rarement l'héritage multiple, je n'ai même pas vraiment d'exemple parlant dans lequel il pourrait être utile. Je laisse le soin à d'autres d'en donner s'ils en connaissent.
Manquant de doc sur le sujet je suis parti de l'héritage simple et j'ai essayé d'extrapoler. Mais ça ne marche pas. Dans le petit bout de code ci-dessous l'initialisation du deuxième widget "écrase" celle du premier, ne tient pas compte de l'incrémentation de colonne dans la méthode, et ne présente donc que le deuxième widget. Quelqu'un pourrait-il me brancher sur une doc ou des exemples. Merci d'avance.
#!/usr/bin/env python # -*- coding: utf-8 -*- from Tkinter import * class Cellule(Label, Entry):
En fait ta cellule doit être un conteneur pour un label et une entry. Ce type de conteneur existe dans Tkinter: c'est un Frame. Donc: class Cellule(Frame):
def __init__(self, cadre, item, texte):
Le conteneur passé dans "cadre" ne sert donc plus à rien: l'objet est lui-même un conteneur. Donc: def __init__(self, item, texte):
Ca, on laisse:
self.texte = texte
On initialise le cadre, et on crée les composants de la cellule: Frame.__init__(self) self.label = Label(self, text=item) self.entry = Entry(self, width )
Du coup, la méthode Compose ne sert plus à rien. On peut donc remplacer tout ça:
Et pour utiliser ça, on fait donc quelque-chose comme: if __name__ == "__main__": racine = Tk() racine.title("-*-") cel = Cellule("item", "texte entré") cel.pack() racine.mainloop()
Et voilà.
HTH -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
On Thu, 25 Jan 2007 11:46:39 +0100, card.lemoine <card.lemoine@wanadoo.fr>
wrote:
Bonjour,
Je voulais étudier l'héritage multiple à l'aide de Python, que je
découvre
et, en partant de l'exemple simple qui consiste à construire une cellule
graphique composée de deux widgets, respectivement de type "label"
et "entry".
"Composée de", donc ce n'est pas un héritage, mais une... composition.
Chacune de tes cellules comporte à la fois un Label, et une Entry. Si tu
hérites des deux, tu dis que ta cellule *est* à la fois un Label et une
Entry, ce qui n'est pas la même chose du tout. Utilisant moi-même très
rarement l'héritage multiple, je n'ai même pas vraiment d'exemple parlant
dans lequel il pourrait être utile. Je laisse le soin à d'autres d'en
donner s'ils en connaissent.
Manquant de doc sur le sujet je suis parti de l'héritage simple et j'ai
essayé d'extrapoler. Mais ça ne marche pas. Dans le petit bout de code
ci-dessous l'initialisation du deuxième widget "écrase" celle du premier,
ne tient pas compte de l'incrémentation de colonne dans la méthode, et ne
présente donc que le deuxième widget. Quelqu'un pourrait-il me brancher
sur
une doc ou des exemples. Merci d'avance.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Tkinter import *
class Cellule(Label, Entry):
En fait ta cellule doit être un conteneur pour un label et une entry. Ce
type de conteneur existe dans Tkinter: c'est un Frame. Donc:
class Cellule(Frame):
def __init__(self, cadre, item, texte):
Le conteneur passé dans "cadre" ne sert donc plus à rien: l'objet est
lui-même un conteneur. Donc:
def __init__(self, item, texte):
Ca, on laisse:
self.texte = texte
On initialise le cadre, et on crée les composants de la cellule:
Frame.__init__(self)
self.label = Label(self, text=item)
self.entry = Entry(self, width )
Du coup, la méthode Compose ne sert plus à rien. On peut donc remplacer
tout ça:
Et pour utiliser ça, on fait donc quelque-chose comme:
if __name__ == "__main__":
racine = Tk()
racine.title("-*-")
cel = Cellule("item", "texte entré")
cel.pack()
racine.mainloop()
Et voilà.
HTH
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
On Thu, 25 Jan 2007 11:46:39 +0100, card.lemoine wrote:
Bonjour,
Je voulais étudier l'héritage multiple à l'aide de Python, que je découvre et, en partant de l'exemple simple qui consiste à construire une cellule graphique composée de deux widgets, respectivement de type "label" et "entry".
"Composée de", donc ce n'est pas un héritage, mais une... composition. Chacune de tes cellules comporte à la fois un Label, et une Entry. Si tu hérites des deux, tu dis que ta cellule *est* à la fois un Label et une Entry, ce qui n'est pas la même chose du tout. Utilisant moi-même très rarement l'héritage multiple, je n'ai même pas vraiment d'exemple parlant dans lequel il pourrait être utile. Je laisse le soin à d'autres d'en donner s'ils en connaissent.
Manquant de doc sur le sujet je suis parti de l'héritage simple et j'ai essayé d'extrapoler. Mais ça ne marche pas. Dans le petit bout de code ci-dessous l'initialisation du deuxième widget "écrase" celle du premier, ne tient pas compte de l'incrémentation de colonne dans la méthode, et ne présente donc que le deuxième widget. Quelqu'un pourrait-il me brancher sur une doc ou des exemples. Merci d'avance.
#!/usr/bin/env python # -*- coding: utf-8 -*- from Tkinter import * class Cellule(Label, Entry):
En fait ta cellule doit être un conteneur pour un label et une entry. Ce type de conteneur existe dans Tkinter: c'est un Frame. Donc: class Cellule(Frame):
def __init__(self, cadre, item, texte):
Le conteneur passé dans "cadre" ne sert donc plus à rien: l'objet est lui-même un conteneur. Donc: def __init__(self, item, texte):
Ca, on laisse:
self.texte = texte
On initialise le cadre, et on crée les composants de la cellule: Frame.__init__(self) self.label = Label(self, text=item) self.entry = Entry(self, width )
Du coup, la méthode Compose ne sert plus à rien. On peut donc remplacer tout ça:
Et pour utiliser ça, on fait donc quelque-chose comme: if __name__ == "__main__": racine = Tk() racine.title("-*-") cel = Cellule("item", "texte entré") cel.pack() racine.mainloop()
Et voilà.
HTH -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
Bruno Desthuilliers
On Thu, 25 Jan 2007 11:46:39 +0100, card.lemoine wrote:
Bonjour,
Je voulais étudier l'héritage multiple à l'aide de Python, que je découvre et, en partant de l'exemple simple qui consiste à construire une cellule graphique composée de deux widgets, respectivement de type "label" et "entry".
"Composée de", donc ce n'est pas un héritage, mais une... composition. Chacune de tes cellules comporte à la fois un Label, et une Entry. Si tu hérites des deux, tu dis que ta cellule *est* à la fois un Label et une Entry, ce qui n'est pas la même chose du tout.
<aol />
Utilisant moi-même très rarement l'héritage multiple, je n'ai même pas vraiment d'exemple parlant dans lequel il pourrait être utile. Je laisse le soin à d'autres d'en donner s'ils en connaissent.
Essentiellement pour des classes Mixin...
On Thu, 25 Jan 2007 11:46:39 +0100, card.lemoine
<card.lemoine@wanadoo.fr> wrote:
Bonjour,
Je voulais étudier l'héritage multiple à l'aide de Python, que je
découvre
et, en partant de l'exemple simple qui consiste à construire une cellule
graphique composée de deux widgets, respectivement de type "label"
et "entry".
"Composée de", donc ce n'est pas un héritage, mais une... composition.
Chacune de tes cellules comporte à la fois un Label, et une Entry. Si tu
hérites des deux, tu dis que ta cellule *est* à la fois un Label et une
Entry, ce qui n'est pas la même chose du tout.
<aol />
Utilisant moi-même très
rarement l'héritage multiple, je n'ai même pas vraiment d'exemple
parlant dans lequel il pourrait être utile. Je laisse le soin à d'autres
d'en donner s'ils en connaissent.
On Thu, 25 Jan 2007 11:46:39 +0100, card.lemoine wrote:
Bonjour,
Je voulais étudier l'héritage multiple à l'aide de Python, que je découvre et, en partant de l'exemple simple qui consiste à construire une cellule graphique composée de deux widgets, respectivement de type "label" et "entry".
"Composée de", donc ce n'est pas un héritage, mais une... composition. Chacune de tes cellules comporte à la fois un Label, et une Entry. Si tu hérites des deux, tu dis que ta cellule *est* à la fois un Label et une Entry, ce qui n'est pas la même chose du tout.
<aol />
Utilisant moi-même très rarement l'héritage multiple, je n'ai même pas vraiment d'exemple parlant dans lequel il pourrait être utile. Je laisse le soin à d'autres d'en donner s'ils en connaissent.
Essentiellement pour des classes Mixin...
Bruno Desthuilliers
Bonjour,
Je voulais étudier l'héritage multiple à l'aide de Python, que je découvre et, en partant de l'exemple simple qui consiste à construire une cellule graphique composée de deux widgets, respectivement de type "label" et "entry".
Comme le signale Eric, ce n'est pas un bon cas d'utilisation de l'héritage multiple, particulièrement en Python où du fait du typage dynamique, l'héritage ne concerne quasiment que l'implémentation (ie: il n'est pas nécessaire pour le polymorphisme).
Dans ton exemple, la solution évidente (et accessoirement le meilleur choix de conception) est la composition, avec éventuellement délégation - ce que Python supporte for bien (cf __getattr__ / __setattr__).
Dans mon expérience, en Python, l'héritage multiple est rarement une bonne idée sauf pour des classes Mixin (classes qui sont destinées à rajouter un ensemble de fonctionnalités à d'autres classes).
Bonjour,
Je voulais étudier l'héritage multiple à l'aide de Python, que je découvre
et, en partant de l'exemple simple qui consiste à construire une cellule
graphique composée de deux widgets, respectivement de type "label"
et "entry".
Comme le signale Eric, ce n'est pas un bon cas d'utilisation de
l'héritage multiple, particulièrement en Python où du fait du typage
dynamique, l'héritage ne concerne quasiment que l'implémentation (ie: il
n'est pas nécessaire pour le polymorphisme).
Dans ton exemple, la solution évidente (et accessoirement le meilleur
choix de conception) est la composition, avec éventuellement délégation
- ce que Python supporte for bien (cf __getattr__ / __setattr__).
Dans mon expérience, en Python, l'héritage multiple est rarement une
bonne idée sauf pour des classes Mixin (classes qui sont destinées à
rajouter un ensemble de fonctionnalités à d'autres classes).
Je voulais étudier l'héritage multiple à l'aide de Python, que je découvre et, en partant de l'exemple simple qui consiste à construire une cellule graphique composée de deux widgets, respectivement de type "label" et "entry".
Comme le signale Eric, ce n'est pas un bon cas d'utilisation de l'héritage multiple, particulièrement en Python où du fait du typage dynamique, l'héritage ne concerne quasiment que l'implémentation (ie: il n'est pas nécessaire pour le polymorphisme).
Dans ton exemple, la solution évidente (et accessoirement le meilleur choix de conception) est la composition, avec éventuellement délégation - ce que Python supporte for bien (cf __getattr__ / __setattr__).
Dans mon expérience, en Python, l'héritage multiple est rarement une bonne idée sauf pour des classes Mixin (classes qui sont destinées à rajouter un ensemble de fonctionnalités à d'autres classes).
card.lemoine
Merci. C'est très clair et tes propositions correspondent sensiblement à un essai antérieur. Mais je voulais essayer de pousser un peu le modèle objet et, concernant l'héritage multiple, j'ai du mal à en percevoir l'usage. Alain
Eric Brunel wrote:
"Composée de", donc ce n'est pas un héritage, mais une... composition.
Touché
Merci. C'est très clair et tes propositions correspondent sensiblement à un
essai antérieur. Mais je voulais essayer de pousser un peu le modèle objet
et, concernant l'héritage multiple, j'ai du mal à en percevoir l'usage.
Alain
Eric Brunel wrote:
"Composée de", donc ce n'est pas un héritage, mais une... composition.
Merci. C'est très clair et tes propositions correspondent sensiblement à un essai antérieur. Mais je voulais essayer de pousser un peu le modèle objet et, concernant l'héritage multiple, j'ai du mal à en percevoir l'usage. Alain
Eric Brunel wrote:
"Composée de", donc ce n'est pas un héritage, mais une... composition.
Touché
card.lemoine
Merci. Là je n'ai pas tout compris mais je vais aller y voir. Alain
Dans ton exemple, la solution évidente (et accessoirement le meilleur choix de conception) est la composition, avec éventuellement délégation - ce que Python supporte for bien (cf __getattr__ / __setattr__).
Dans mon expérience, en Python, l'héritage multiple est rarement une bonne idée sauf pour des classes Mixin (classes qui sont destinées à rajouter un ensemble de fonctionnalités à d'autres classes).
Merci. Là je n'ai pas tout compris mais je vais aller y voir.
Alain
Dans ton exemple, la solution évidente (et accessoirement le meilleur
choix de conception) est la composition, avec éventuellement délégation
- ce que Python supporte for bien (cf __getattr__ / __setattr__).
Dans mon expérience, en Python, l'héritage multiple est rarement une
bonne idée sauf pour des classes Mixin (classes qui sont destinées à
rajouter un ensemble de fonctionnalités à d'autres classes).
Merci. Là je n'ai pas tout compris mais je vais aller y voir. Alain
Dans ton exemple, la solution évidente (et accessoirement le meilleur choix de conception) est la composition, avec éventuellement délégation - ce que Python supporte for bien (cf __getattr__ / __setattr__).
Dans mon expérience, en Python, l'héritage multiple est rarement une bonne idée sauf pour des classes Mixin (classes qui sont destinées à rajouter un ensemble de fonctionnalités à d'autres classes).