- de classes Mixins ;
- de plugins pour une application quelconque, sans utiliser de
solution tierces (egg, autres);
- de classes Mixins ;
- de plugins pour une application quelconque, sans utiliser de
solution tierces (egg, autres);
- de classes Mixins ;
- de plugins pour une application quelconque, sans utiliser de
solution tierces (egg, autres);
Bonjour !- de classes Mixins ;
Je ne suis pas sûr de bien comprendre. Avec Python, à quoi serviraient
des classes mixin ? Ne suffit-il pas de créer une super-classe, dont
on ferait hériter les classes qui en ont besoin ? Vu que l'héritage
multiple existe dans Python, c'est un moyen facile d'ajouter des
méthodes.
Sinon, on peut aussi ajouter des méthodes à une classe quelconque.- de plugins pour une application quelconque, sans utiliser de
solution tierces (egg, autres);
Là je décroche. Des plugins "pour une application quelconque" ça se mble
trop universel pour être crédible/possible.
Peut-être que quelques explications complémentaires...
--
@-salutations
Michel Claveau
Bonjour !
- de classes Mixins ;
Je ne suis pas sûr de bien comprendre. Avec Python, à quoi serviraient
des classes mixin ? Ne suffit-il pas de créer une super-classe, dont
on ferait hériter les classes qui en ont besoin ? Vu que l'héritage
multiple existe dans Python, c'est un moyen facile d'ajouter des
méthodes.
Sinon, on peut aussi ajouter des méthodes à une classe quelconque.
- de plugins pour une application quelconque, sans utiliser de
solution tierces (egg, autres);
Là je décroche. Des plugins "pour une application quelconque" ça se mble
trop universel pour être crédible/possible.
Peut-être que quelques explications complémentaires...
--
@-salutations
Michel Claveau
Bonjour !- de classes Mixins ;
Je ne suis pas sûr de bien comprendre. Avec Python, à quoi serviraient
des classes mixin ? Ne suffit-il pas de créer une super-classe, dont
on ferait hériter les classes qui en ont besoin ? Vu que l'héritage
multiple existe dans Python, c'est un moyen facile d'ajouter des
méthodes.
Sinon, on peut aussi ajouter des méthodes à une classe quelconque.- de plugins pour une application quelconque, sans utiliser de
solution tierces (egg, autres);
Là je décroche. Des plugins "pour une application quelconque" ça se mble
trop universel pour être crédible/possible.
Peut-être que quelques explications complémentaires...
--
@-salutations
Michel Claveau
On 21 mai, 15:07, MCI, Shadok Gouroudoudou wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
class Foo(object):
...
mixin(Foo, SomeMixin)
mixin(Foo, AnotherMixin)
quelques explications supplémentaire ici :
http://sebulba.wikispaces.com/recipe+module+mixins
En ce qui concerne les plugins, comment font les autres dans une
application avec GUI par exemple ?
J'aimerai ne pas avoir à joueur avec des __import__(), mais ça me
semble un peu difficile.
On 21 mai, 15:07, MCI, Shadok Gouroudoudou <pas...@spam.svp> wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
class Foo(object):
...
mixin(Foo, SomeMixin)
mixin(Foo, AnotherMixin)
quelques explications supplémentaire ici :
http://sebulba.wikispaces.com/recipe+module+mixins
En ce qui concerne les plugins, comment font les autres dans une
application avec GUI par exemple ?
J'aimerai ne pas avoir à joueur avec des __import__(), mais ça me
semble un peu difficile.
On 21 mai, 15:07, MCI, Shadok Gouroudoudou wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
class Foo(object):
...
mixin(Foo, SomeMixin)
mixin(Foo, AnotherMixin)
quelques explications supplémentaire ici :
http://sebulba.wikispaces.com/recipe+module+mixins
En ce qui concerne les plugins, comment font les autres dans une
application avec GUI par exemple ?
J'aimerai ne pas avoir à joueur avec des __import__(), mais ça me
semble un peu difficile.
On 21 mai, 15:07, MCI, Shadok Gouroudoudou wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
bouah, c'est trop horrible,
faut tout arrêter à ce stade. La solution
proposée ne présente aucun intéret que de s'embarasser de problème qu'on
a pas avec l'héritage multiple.
En plus elle ne dit pas son nom, c'est
du monkey patch déguisé,
et le monkey patch n'a pas vocation à résoudre
des problèmes de conception.
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Le bonne façon de concevoir/implémenter les mixins en python c'est
l'exemple donné par la classe DictMixin du module UserDict, et
d'utiliser l'héritage multiple.
Si on veut vraiment éviter l'héritage, la seule alternative à qui soit
propre c'est d'utiliser un wrapper, pour une instance préexistante par
exemple, dont le rôle et d'adapter l'objet à l'interface attendue (par
une fonction).
quelques explications supplémentaire ici :
http://sebulba.wikispaces.com/recipe+module+mixins
De mieux en mieux, il ne faut pas chercher à retranscrire ce qu'on
trouve ailleurs tel quel (c'est aussi ce genre de choses qui me font
dire que Ruby n'est pas un langage encore très stable/mature dans sa
conception, et qu'il vaut mieux avoir un héritage multiple consistent à
la Python que d'avoir à faire des trucs dans le genre).
On 21 mai, 15:07, MCI, Shadok Gouroudoudou <pas...@spam.svp> wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
bouah, c'est trop horrible,
faut tout arrêter à ce stade. La solution
proposée ne présente aucun intéret que de s'embarasser de problème qu'on
a pas avec l'héritage multiple.
En plus elle ne dit pas son nom, c'est
du monkey patch déguisé,
et le monkey patch n'a pas vocation à résoudre
des problèmes de conception.
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Le bonne façon de concevoir/implémenter les mixins en python c'est
l'exemple donné par la classe DictMixin du module UserDict, et
d'utiliser l'héritage multiple.
Si on veut vraiment éviter l'héritage, la seule alternative à qui soit
propre c'est d'utiliser un wrapper, pour une instance préexistante par
exemple, dont le rôle et d'adapter l'objet à l'interface attendue (par
une fonction).
quelques explications supplémentaire ici :
http://sebulba.wikispaces.com/recipe+module+mixins
De mieux en mieux, il ne faut pas chercher à retranscrire ce qu'on
trouve ailleurs tel quel (c'est aussi ce genre de choses qui me font
dire que Ruby n'est pas un langage encore très stable/mature dans sa
conception, et qu'il vaut mieux avoir un héritage multiple consistent à
la Python que d'avoir à faire des trucs dans le genre).
On 21 mai, 15:07, MCI, Shadok Gouroudoudou wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
bouah, c'est trop horrible,
faut tout arrêter à ce stade. La solution
proposée ne présente aucun intéret que de s'embarasser de problème qu'on
a pas avec l'héritage multiple.
En plus elle ne dit pas son nom, c'est
du monkey patch déguisé,
et le monkey patch n'a pas vocation à résoudre
des problèmes de conception.
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Le bonne façon de concevoir/implémenter les mixins en python c'est
l'exemple donné par la classe DictMixin du module UserDict, et
d'utiliser l'héritage multiple.
Si on veut vraiment éviter l'héritage, la seule alternative à qui soit
propre c'est d'utiliser un wrapper, pour une instance préexistante par
exemple, dont le rôle et d'adapter l'objet à l'interface attendue (par
une fonction).
quelques explications supplémentaire ici :
http://sebulba.wikispaces.com/recipe+module+mixins
De mieux en mieux, il ne faut pas chercher à retranscrire ce qu'on
trouve ailleurs tel quel (c'est aussi ce genre de choses qui me font
dire que Ruby n'est pas un langage encore très stable/mature dans sa
conception, et qu'il vaut mieux avoir un héritage multiple consistent à
la Python que d'avoir à faire des trucs dans le genre).
Maric,
je n'ai prétendu que l'implémentation que j'avais trouvée sur le site
précédent était proprement codée.
Tu parles du cookbook, c'est justement là que je l'ai trouvée(les 2
premiers résultats en cherchant "mixins").
Qu'as-tu de plus "propre" sur le cookbook ?
On 21 mai, 15:07, MCI, Shadok Gouroudoudou wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
bouah, c'est trop horrible,
Ah bon ? Pourquoi donc ?faut tout arrêter à ce stade. La solution proposée ne présente aucun
intéret que de s'embarasser de problème qu'on a pas avec l'héritage
multiple.
Hmm... Il faudrait probablement réfléchir plus que je ne l'ai fait pour
le moment aux avantages et inconvénients comparés des deux solutions,
mais le fait est que l'héritage multiple n'a pas non plus que des
avantages. Ceux qui ont un peu hacké Zope2 en savent quelque chose...
En plus elle ne dit pas son nom, c'est du monkey patch déguisé,
Je dirais plutôt "encapsulé" que "déguisé".et le monkey patch n'a pas vocation à résoudre des problèmes de
conception.
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ? Attention, je ne dis pas qu'il faille
systématiquement utiliser les possibilités les plus avancées, mais de là
à cataloguer de la sorte toute utilisation d'un module qui fait partie
de la bibliothèque standard, c'est peu être un poil expéditif. J'utilise
souvent inspect, et occasionnellement le monkeypatching, et d'une
manière générale le résultat est nettement moins vilain que si je ne le
faisais pas.
quelques explications supplémentaire ici :
http://sebulba.wikispaces.com/recipe+module+mixins
De mieux en mieux, il ne faut pas chercher à retranscrire ce qu'on
trouve ailleurs tel quel (c'est aussi ce genre de choses qui me font
dire que Ruby n'est pas un langage encore très stable/mature dans sa
conception, et qu'il vaut mieux avoir un héritage multiple consistent
à la Python que d'avoir à faire des trucs dans le genre).
Il ne faut peut-être pas non plus juger les solutions d'un langage
d'après le concepts d'un autre langage ? Les modules mixin de Ruby
répondent à la grande majorité des cas d'utilisation de l'héritage
multiple tout en faisant l'économie des complexités de cette dernière.
C'est un choix de conception délibéré, et ce n'est certainement pas AMHA
le plus mauvais. S'il est évident que Ruby souffre encore de quelques
défauts de jeunesse, ils sont pour l'essentiel du côté de
l'implémentation.
Mes deux centimes...
Maric,
je n'ai prétendu que l'implémentation que j'avais trouvée sur le site
précédent était proprement codée.
Tu parles du cookbook, c'est justement là que je l'ai trouvée(les 2
premiers résultats en cherchant "mixins").
Qu'as-tu de plus "propre" sur le cookbook ?
On 21 mai, 15:07, MCI, Shadok Gouroudoudou <pas...@spam.svp> wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
bouah, c'est trop horrible,
Ah bon ? Pourquoi donc ?
faut tout arrêter à ce stade. La solution proposée ne présente aucun
intéret que de s'embarasser de problème qu'on a pas avec l'héritage
multiple.
Hmm... Il faudrait probablement réfléchir plus que je ne l'ai fait pour
le moment aux avantages et inconvénients comparés des deux solutions,
mais le fait est que l'héritage multiple n'a pas non plus que des
avantages. Ceux qui ont un peu hacké Zope2 en savent quelque chose...
En plus elle ne dit pas son nom, c'est du monkey patch déguisé,
Je dirais plutôt "encapsulé" que "déguisé".
et le monkey patch n'a pas vocation à résoudre des problèmes de
conception.
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ? Attention, je ne dis pas qu'il faille
systématiquement utiliser les possibilités les plus avancées, mais de là
à cataloguer de la sorte toute utilisation d'un module qui fait partie
de la bibliothèque standard, c'est peu être un poil expéditif. J'utilise
souvent inspect, et occasionnellement le monkeypatching, et d'une
manière générale le résultat est nettement moins vilain que si je ne le
faisais pas.
quelques explications supplémentaire ici :
http://sebulba.wikispaces.com/recipe+module+mixins
De mieux en mieux, il ne faut pas chercher à retranscrire ce qu'on
trouve ailleurs tel quel (c'est aussi ce genre de choses qui me font
dire que Ruby n'est pas un langage encore très stable/mature dans sa
conception, et qu'il vaut mieux avoir un héritage multiple consistent
à la Python que d'avoir à faire des trucs dans le genre).
Il ne faut peut-être pas non plus juger les solutions d'un langage
d'après le concepts d'un autre langage ? Les modules mixin de Ruby
répondent à la grande majorité des cas d'utilisation de l'héritage
multiple tout en faisant l'économie des complexités de cette dernière.
C'est un choix de conception délibéré, et ce n'est certainement pas AMHA
le plus mauvais. S'il est évident que Ruby souffre encore de quelques
défauts de jeunesse, ils sont pour l'essentiel du côté de
l'implémentation.
Mes deux centimes...
Maric,
je n'ai prétendu que l'implémentation que j'avais trouvée sur le site
précédent était proprement codée.
Tu parles du cookbook, c'est justement là que je l'ai trouvée(les 2
premiers résultats en cherchant "mixins").
Qu'as-tu de plus "propre" sur le cookbook ?
On 21 mai, 15:07, MCI, Shadok Gouroudoudou wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
bouah, c'est trop horrible,
Ah bon ? Pourquoi donc ?faut tout arrêter à ce stade. La solution proposée ne présente aucun
intéret que de s'embarasser de problème qu'on a pas avec l'héritage
multiple.
Hmm... Il faudrait probablement réfléchir plus que je ne l'ai fait pour
le moment aux avantages et inconvénients comparés des deux solutions,
mais le fait est que l'héritage multiple n'a pas non plus que des
avantages. Ceux qui ont un peu hacké Zope2 en savent quelque chose...
En plus elle ne dit pas son nom, c'est du monkey patch déguisé,
Je dirais plutôt "encapsulé" que "déguisé".et le monkey patch n'a pas vocation à résoudre des problèmes de
conception.
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ? Attention, je ne dis pas qu'il faille
systématiquement utiliser les possibilités les plus avancées, mais de là
à cataloguer de la sorte toute utilisation d'un module qui fait partie
de la bibliothèque standard, c'est peu être un poil expéditif. J'utilise
souvent inspect, et occasionnellement le monkeypatching, et d'une
manière générale le résultat est nettement moins vilain que si je ne le
faisais pas.
quelques explications supplémentaire ici :
http://sebulba.wikispaces.com/recipe+module+mixins
De mieux en mieux, il ne faut pas chercher à retranscrire ce qu'on
trouve ailleurs tel quel (c'est aussi ce genre de choses qui me font
dire que Ruby n'est pas un langage encore très stable/mature dans sa
conception, et qu'il vaut mieux avoir un héritage multiple consistent
à la Python que d'avoir à faire des trucs dans le genre).
Il ne faut peut-être pas non plus juger les solutions d'un langage
d'après le concepts d'un autre langage ? Les modules mixin de Ruby
répondent à la grande majorité des cas d'utilisation de l'héritage
multiple tout en faisant l'économie des complexités de cette dernière.
C'est un choix de conception délibéré, et ce n'est certainement pas AMHA
le plus mauvais. S'il est évident que Ruby souffre encore de quelques
défauts de jeunesse, ils sont pour l'essentiel du côté de
l'implémentation.
Mes deux centimes...
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ?
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ?
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ?
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ?
Euh, il s'agit pas vraiment d'un dogme, c'est juste que quand on utilise
pas un outil pour ce pourquoi il est prévu c'est louche.
Mais voilà ! je me souviens d'un exemple d'une utilisation d'inspect
pour créer des /properties/ à partir de décorateurs, c'était assez élégant.
Mais dans les deux cas c'est pour contourner une limitation du langage
concernant la notation, et je ne pense pas qu'on puisse tabler sur le
fait que cette solution soit pérenne (si il y a vraiment un problème
avec la notation une solution viendra du langage elle-même),
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ?
Euh, il s'agit pas vraiment d'un dogme, c'est juste que quand on utilise
pas un outil pour ce pourquoi il est prévu c'est louche.
Mais voilà ! je me souviens d'un exemple d'une utilisation d'inspect
pour créer des /properties/ à partir de décorateurs, c'était assez élégant.
Mais dans les deux cas c'est pour contourner une limitation du langage
concernant la notation, et je ne pense pas qu'on puisse tabler sur le
fait que cette solution soit pérenne (si il y a vraiment un problème
avec la notation une solution viendra du langage elle-même),
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ?
Euh, il s'agit pas vraiment d'un dogme, c'est juste que quand on utilise
pas un outil pour ce pourquoi il est prévu c'est louche.
Mais voilà ! je me souviens d'un exemple d'une utilisation d'inspect
pour créer des /properties/ à partir de décorateurs, c'était assez élégant.
Mais dans les deux cas c'est pour contourner une limitation du langage
concernant la notation, et je ne pense pas qu'on puisse tabler sur le
fait que cette solution soit pérenne (si il y a vraiment un problème
avec la notation une solution viendra du langage elle-même),
On 21 mai, 15:07, MCI, Shadok Gouroudoudou wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
bouah, c'est trop horrible,
Ah bon ? Pourquoi donc ?faut tout arrêter à ce stade. La solution proposée ne présente aucun
intéret que de s'embarasser de problème qu'on a pas avec l'héritage
multiple.
Hmm... Il faudrait probablement réfléchir plus que je ne l'ai fait pour
le moment aux avantages et inconvénients comparés des deux solutions,
mais le fait est que l'héritage multiple n'a pas non plus que des
avantages. Ceux qui ont un peu hacké Zope2 en savent quelque chose...
Mais bon, pour être clair, quel est l'interet de la méthode ?
Recopier dans chaque classe les méthodes d'une autre ?
C'est justement pour éviter cela qu'on a inventé l'héritage. Et puis
comment on gère les collisions de nom avec cette technique ?
C'est la notation ? Non, sérieux.
Franchement remplacer l'héritage pour ça c'est comme se tirer une balle
dans le pied.
L'héritage est fait pour ça, hériter du comportement d'une autre classe.
La seule autre relation connue, d'un point de vue POO, entre deux
objets c'est l'agrégation
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ? Attention, je ne dis pas qu'il faille
systématiquement utiliser les possibilités les plus avancées, mais de là
à cataloguer de la sorte toute utilisation d'un module qui fait partie
de la bibliothèque standard, c'est peu être un poil expéditif. J'utilise
souvent inspect, et occasionnellement le monkeypatching, et d'une
manière générale le résultat est nettement moins vilain que si je ne le
faisais pas.
inspect c'est bien, super, c'est pour ces possibilité là que Pÿthon (en
tant que langage à typage dynamique)
est de loin supérieur à Java,
disons. Le rôle d'inspect c'est de permettre au programmeur de
travailler sur les frame, de naviguer dans la pile etc.
Quand on s'en sert pour résoudre des problèmes de conception, j'ai un
doute, j'aurai tendance à penser que le problème est mal posé au départ
où la solution un peu trop tordu.
Concernant le monkey patching, je ne le condamne pas, au contraire,
c'est un outil que j'utilise très souvent avec beaucoup de plaisir, et
qui, a contrario de ce que l'on pourrait croire quand on vient de la
programmation "statique", est parfaitement sûr.
Son but ? Surcharger le comportement d'un objet existant et sur lequel
on a pas le contrôle. L'utiliser pour *définir* est donc a priori
inaproprié et très certainement tiré par les cheveux.
il ne faut pas chercher à retranscrire ce qu'on
trouve ailleurs tel quel (c'est aussi ce genre de choses qui me font
dire que Ruby n'est pas un langage encore très stable/mature dans sa
conception, et qu'il vaut mieux avoir un héritage multiple consistent
à la Python que d'avoir à faire des trucs dans le genre).
Il ne faut peut-être pas non plus juger les solutions d'un langage
d'après le concepts d'un autre langage ? Les modules mixin de Ruby
répondent à la grande majorité des cas d'utilisation de l'héritage
multiple tout en faisant l'économie des complexités de cette dernière.
C'est un choix de conception délibéré, et ce n'est certainement pas AMHA
le plus mauvais. S'il est évident que Ruby souffre encore de quelques
défauts de jeunesse, ils sont pour l'essentiel du côté de
l'implémentation.
Je veux pas cracher sur Ruby, je connais pas très bien. Si sa conception
manque de maturité, c'est plus une impression que j'ai à chaque fois que
je suis les discussions sur le sujet.
J'ai tendance à penser que c'est un peu fourre-tout, leur façon
d'ajouter des nouvelles fonctionnalités au language, à la différence de
ce qui se passe avec Python, qui a beaucoup évolué lui aussi avec les
dernières versions, mais toujurs dans le sens d'une plus grande
cohérence générale, d'une unification des différentes solutions
existantes. Alors qu'avec Ruby, quand j'ai suivi un tutoriel, à chaque
chapître j'avais l'impression de découvrir une nouvelle façon de faire
ce que j'avais appris à faire trois chapîtres plus tôt.
En revanche je suis pas d'accord avec le choix de Ruby et Java de jeter
l'héritage multiple. C'est pas parce qu'une méthode peut être mal
utilisée qu'on doit la supprimer et chercher des paliatifs.
Je développe beaucoup sur Zope2, et c'est pas l'héritage multiple qui
est en question dans Zope2 (enfin je vois pas un seul problème concret
qui pourrait faire dire cela, des liens ?),
mais sa mauvaise
utilisation. De toute façon la conception interne de Zope ne respecte
pas un des principe même du zen de Python "flat is better, than nested".
C'est la multiplication des classes et leur imbrication qui est
problématique et l'utilisation de l'héritage systématique alors que
d'autres techniques existent et seraient plus apropriées.
Du reste, je suis pas fan des solutions proposées dans la conception de
Zope3 : interfaces à la Java,
Zcml, ..., tout ça ça fait très "mode"
J2EE et cela rapproche fatalement Zope de la lourdeur de J2EE.
Mes deux centimes...
Les miens aussi.
On 21 mai, 15:07, MCI, Shadok Gouroudoudou <pas...@spam.svp> wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
bouah, c'est trop horrible,
Ah bon ? Pourquoi donc ?
faut tout arrêter à ce stade. La solution proposée ne présente aucun
intéret que de s'embarasser de problème qu'on a pas avec l'héritage
multiple.
Hmm... Il faudrait probablement réfléchir plus que je ne l'ai fait pour
le moment aux avantages et inconvénients comparés des deux solutions,
mais le fait est que l'héritage multiple n'a pas non plus que des
avantages. Ceux qui ont un peu hacké Zope2 en savent quelque chose...
Mais bon, pour être clair, quel est l'interet de la méthode ?
Recopier dans chaque classe les méthodes d'une autre ?
C'est justement pour éviter cela qu'on a inventé l'héritage. Et puis
comment on gère les collisions de nom avec cette technique ?
C'est la notation ? Non, sérieux.
Franchement remplacer l'héritage pour ça c'est comme se tirer une balle
dans le pied.
L'héritage est fait pour ça, hériter du comportement d'une autre classe.
La seule autre relation connue, d'un point de vue POO, entre deux
objets c'est l'agrégation
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ? Attention, je ne dis pas qu'il faille
systématiquement utiliser les possibilités les plus avancées, mais de là
à cataloguer de la sorte toute utilisation d'un module qui fait partie
de la bibliothèque standard, c'est peu être un poil expéditif. J'utilise
souvent inspect, et occasionnellement le monkeypatching, et d'une
manière générale le résultat est nettement moins vilain que si je ne le
faisais pas.
inspect c'est bien, super, c'est pour ces possibilité là que Pÿthon (en
tant que langage à typage dynamique)
est de loin supérieur à Java,
disons. Le rôle d'inspect c'est de permettre au programmeur de
travailler sur les frame, de naviguer dans la pile etc.
Quand on s'en sert pour résoudre des problèmes de conception, j'ai un
doute, j'aurai tendance à penser que le problème est mal posé au départ
où la solution un peu trop tordu.
Concernant le monkey patching, je ne le condamne pas, au contraire,
c'est un outil que j'utilise très souvent avec beaucoup de plaisir, et
qui, a contrario de ce que l'on pourrait croire quand on vient de la
programmation "statique", est parfaitement sûr.
Son but ? Surcharger le comportement d'un objet existant et sur lequel
on a pas le contrôle. L'utiliser pour *définir* est donc a priori
inaproprié et très certainement tiré par les cheveux.
il ne faut pas chercher à retranscrire ce qu'on
trouve ailleurs tel quel (c'est aussi ce genre de choses qui me font
dire que Ruby n'est pas un langage encore très stable/mature dans sa
conception, et qu'il vaut mieux avoir un héritage multiple consistent
à la Python que d'avoir à faire des trucs dans le genre).
Il ne faut peut-être pas non plus juger les solutions d'un langage
d'après le concepts d'un autre langage ? Les modules mixin de Ruby
répondent à la grande majorité des cas d'utilisation de l'héritage
multiple tout en faisant l'économie des complexités de cette dernière.
C'est un choix de conception délibéré, et ce n'est certainement pas AMHA
le plus mauvais. S'il est évident que Ruby souffre encore de quelques
défauts de jeunesse, ils sont pour l'essentiel du côté de
l'implémentation.
Je veux pas cracher sur Ruby, je connais pas très bien. Si sa conception
manque de maturité, c'est plus une impression que j'ai à chaque fois que
je suis les discussions sur le sujet.
J'ai tendance à penser que c'est un peu fourre-tout, leur façon
d'ajouter des nouvelles fonctionnalités au language, à la différence de
ce qui se passe avec Python, qui a beaucoup évolué lui aussi avec les
dernières versions, mais toujurs dans le sens d'une plus grande
cohérence générale, d'une unification des différentes solutions
existantes. Alors qu'avec Ruby, quand j'ai suivi un tutoriel, à chaque
chapître j'avais l'impression de découvrir une nouvelle façon de faire
ce que j'avais appris à faire trois chapîtres plus tôt.
En revanche je suis pas d'accord avec le choix de Ruby et Java de jeter
l'héritage multiple. C'est pas parce qu'une méthode peut être mal
utilisée qu'on doit la supprimer et chercher des paliatifs.
Je développe beaucoup sur Zope2, et c'est pas l'héritage multiple qui
est en question dans Zope2 (enfin je vois pas un seul problème concret
qui pourrait faire dire cela, des liens ?),
mais sa mauvaise
utilisation. De toute façon la conception interne de Zope ne respecte
pas un des principe même du zen de Python "flat is better, than nested".
C'est la multiplication des classes et leur imbrication qui est
problématique et l'utilisation de l'héritage systématique alors que
d'autres techniques existent et seraient plus apropriées.
Du reste, je suis pas fan des solutions proposées dans la conception de
Zope3 : interfaces à la Java,
Zcml, ..., tout ça ça fait très "mode"
J2EE et cela rapproche fatalement Zope de la lourdeur de J2EE.
Mes deux centimes...
Les miens aussi.
On 21 mai, 15:07, MCI, Shadok Gouroudoudou wrote:
pour les Mixins, je pensais par exemple à ceci :
http://sebulba.wikispaces.com/recipe+real+mixins
bouah, c'est trop horrible,
Ah bon ? Pourquoi donc ?faut tout arrêter à ce stade. La solution proposée ne présente aucun
intéret que de s'embarasser de problème qu'on a pas avec l'héritage
multiple.
Hmm... Il faudrait probablement réfléchir plus que je ne l'ai fait pour
le moment aux avantages et inconvénients comparés des deux solutions,
mais le fait est que l'héritage multiple n'a pas non plus que des
avantages. Ceux qui ont un peu hacké Zope2 en savent quelque chose...
Mais bon, pour être clair, quel est l'interet de la méthode ?
Recopier dans chaque classe les méthodes d'une autre ?
C'est justement pour éviter cela qu'on a inventé l'héritage. Et puis
comment on gère les collisions de nom avec cette technique ?
C'est la notation ? Non, sérieux.
Franchement remplacer l'héritage pour ça c'est comme se tirer une balle
dans le pied.
L'héritage est fait pour ça, hériter du comportement d'une autre classe.
La seule autre relation connue, d'un point de vue POO, entre deux
objets c'est l'agrégation
Si au moins l'exemple était écrit en évitant l'horrible utilisation
d'inspect, qui dénote souvent qu'on fait quelque chose de très vilain,
Mon Dieu, je réalise soudainement que je fais régulièrement des trucs
très vilains trop horribles. C'est affreux, et mes programmes qui
tournent si bien ! Que dois-je faire, Docteur ?
Honnêtement: Python est un langage dynamique avec d'excellentes
capacités en matière d'introspection. Au nom de quel dogme devrait-on
s'abstenir d'en tirer partie ? Attention, je ne dis pas qu'il faille
systématiquement utiliser les possibilités les plus avancées, mais de là
à cataloguer de la sorte toute utilisation d'un module qui fait partie
de la bibliothèque standard, c'est peu être un poil expéditif. J'utilise
souvent inspect, et occasionnellement le monkeypatching, et d'une
manière générale le résultat est nettement moins vilain que si je ne le
faisais pas.
inspect c'est bien, super, c'est pour ces possibilité là que Pÿthon (en
tant que langage à typage dynamique)
est de loin supérieur à Java,
disons. Le rôle d'inspect c'est de permettre au programmeur de
travailler sur les frame, de naviguer dans la pile etc.
Quand on s'en sert pour résoudre des problèmes de conception, j'ai un
doute, j'aurai tendance à penser que le problème est mal posé au départ
où la solution un peu trop tordu.
Concernant le monkey patching, je ne le condamne pas, au contraire,
c'est un outil que j'utilise très souvent avec beaucoup de plaisir, et
qui, a contrario de ce que l'on pourrait croire quand on vient de la
programmation "statique", est parfaitement sûr.
Son but ? Surcharger le comportement d'un objet existant et sur lequel
on a pas le contrôle. L'utiliser pour *définir* est donc a priori
inaproprié et très certainement tiré par les cheveux.
il ne faut pas chercher à retranscrire ce qu'on
trouve ailleurs tel quel (c'est aussi ce genre de choses qui me font
dire que Ruby n'est pas un langage encore très stable/mature dans sa
conception, et qu'il vaut mieux avoir un héritage multiple consistent
à la Python que d'avoir à faire des trucs dans le genre).
Il ne faut peut-être pas non plus juger les solutions d'un langage
d'après le concepts d'un autre langage ? Les modules mixin de Ruby
répondent à la grande majorité des cas d'utilisation de l'héritage
multiple tout en faisant l'économie des complexités de cette dernière.
C'est un choix de conception délibéré, et ce n'est certainement pas AMHA
le plus mauvais. S'il est évident que Ruby souffre encore de quelques
défauts de jeunesse, ils sont pour l'essentiel du côté de
l'implémentation.
Je veux pas cracher sur Ruby, je connais pas très bien. Si sa conception
manque de maturité, c'est plus une impression que j'ai à chaque fois que
je suis les discussions sur le sujet.
J'ai tendance à penser que c'est un peu fourre-tout, leur façon
d'ajouter des nouvelles fonctionnalités au language, à la différence de
ce qui se passe avec Python, qui a beaucoup évolué lui aussi avec les
dernières versions, mais toujurs dans le sens d'une plus grande
cohérence générale, d'une unification des différentes solutions
existantes. Alors qu'avec Ruby, quand j'ai suivi un tutoriel, à chaque
chapître j'avais l'impression de découvrir une nouvelle façon de faire
ce que j'avais appris à faire trois chapîtres plus tôt.
En revanche je suis pas d'accord avec le choix de Ruby et Java de jeter
l'héritage multiple. C'est pas parce qu'une méthode peut être mal
utilisée qu'on doit la supprimer et chercher des paliatifs.
Je développe beaucoup sur Zope2, et c'est pas l'héritage multiple qui
est en question dans Zope2 (enfin je vois pas un seul problème concret
qui pourrait faire dire cela, des liens ?),
mais sa mauvaise
utilisation. De toute façon la conception interne de Zope ne respecte
pas un des principe même du zen de Python "flat is better, than nested".
C'est la multiplication des classes et leur imbrication qui est
problématique et l'utilisation de l'héritage systématique alors que
d'autres techniques existent et seraient plus apropriées.
Du reste, je suis pas fan des solutions proposées dans la conception de
Zope3 : interfaces à la Java,
Zcml, ..., tout ça ça fait très "mode"
J2EE et cela rapproche fatalement Zope de la lourdeur de J2EE.
Mes deux centimes...
Les miens aussi.
Penser que la conception puisse être totalement découplée de
l'implémentation est AMHA un mythe.
Penser que la conception puisse être totalement découplée de
l'implémentation est AMHA un mythe.
Penser que la conception puisse être totalement découplée de
l'implémentation est AMHA un mythe.