Bonjour,
Il y a un truc que j'ai du mal à saisir en Python : parfois, il y a
des types (date, par exemple), parfois il y a des classes (Decimal,
par exemple). On les repère par leur casse, très bien.
Mais je n'arrive pas à comprendre la logique/cohérence là-dedans : je
veux dire, pourquoi date n'est pas une classe ? c'est quand même
typiquement une abstraction au même sens que Decimal, non ? (je parle
de date, et de Decimal mais il y a une brouettée d'autres exemples).
Si on pouvait m'expliquer la justification de tout ça, je suis preneur
parce que, là, je trouve ça lourd d'être obligé de systématiquement me
poser la question à chaque fois que j'ai besoin d'un objet.
Bonjour,
Il y a un truc que j'ai du mal à saisir en Python : parfois, il y a
des types (date, par exemple), parfois il y a des classes (Decimal,
par exemple). On les repère par leur casse, très bien.
Mais je n'arrive pas à comprendre la logique/cohérence là-dedans : je
veux dire, pourquoi date n'est pas une classe ? c'est quand même
typiquement une abstraction au même sens que Decimal, non ? (je parle
de date, et de Decimal mais il y a une brouettée d'autres exemples).
Si on pouvait m'expliquer la justification de tout ça, je suis preneur
parce que, là, je trouve ça lourd d'être obligé de systématiquement me
poser la question à chaque fois que j'ai besoin d'un objet.
Bonjour,
Il y a un truc que j'ai du mal à saisir en Python : parfois, il y a
des types (date, par exemple), parfois il y a des classes (Decimal,
par exemple). On les repère par leur casse, très bien.
Mais je n'arrive pas à comprendre la logique/cohérence là-dedans : je
veux dire, pourquoi date n'est pas une classe ? c'est quand même
typiquement une abstraction au même sens que Decimal, non ? (je parle
de date, et de Decimal mais il y a une brouettée d'autres exemples).
Si on pouvait m'expliquer la justification de tout ça, je suis preneur
parce que, là, je trouve ça lourd d'être obligé de systématiquement me
poser la question à chaque fois que j'ai besoin d'un objet.
Je dirais que c'est historique.
Les types de base (qui sont des classes!) sont en minuscules.
Les type définis dans des modules tiers utilisent en général des
majuscules au début des mots (mais comme toute règle générale, on doit
sûrement pouvoir y trouver de exceptions).
Certains types étaient précédement dispos dans des modules séparés (ex.
Set, FrozenSet) et sont passés en minuscules lorsqu'ils ont été passé en
builtins (set, frozenset en 2.4).
Je dirais que c'est historique.
Les types de base (qui sont des classes!) sont en minuscules.
Les type définis dans des modules tiers utilisent en général des
majuscules au début des mots (mais comme toute règle générale, on doit
sûrement pouvoir y trouver de exceptions).
Certains types étaient précédement dispos dans des modules séparés (ex.
Set, FrozenSet) et sont passés en minuscules lorsqu'ils ont été passé en
builtins (set, frozenset en 2.4).
Je dirais que c'est historique.
Les types de base (qui sont des classes!) sont en minuscules.
Les type définis dans des modules tiers utilisent en général des
majuscules au début des mots (mais comme toute règle générale, on doit
sûrement pouvoir y trouver de exceptions).
Certains types étaient précédement dispos dans des modules séparés (ex.
Set, FrozenSet) et sont passés en minuscules lorsqu'ils ont été passé en
builtins (set, frozenset en 2.4).
Oui, mais si c'est ça, la sacro-sainte « intuitivité » du langage un
prend un sacré coup sur le museau parce que s'il faut se rappeler des
orthographes particulières de chaque classe, c'est quand même un peu
moyen pour un langage moderne. J'ai même beaucoup de mal à croire
qu'il en soit ainsi, d'ailleurs : C, C++, Java etc. n'ayant pas ce
défaut, je comprendrais mal que Python l'ait.
Oui, mais si c'est ça, la sacro-sainte « intuitivité » du langage un
prend un sacré coup sur le museau parce que s'il faut se rappeler des
orthographes particulières de chaque classe, c'est quand même un peu
moyen pour un langage moderne. J'ai même beaucoup de mal à croire
qu'il en soit ainsi, d'ailleurs : C, C++, Java etc. n'ayant pas ce
défaut, je comprendrais mal que Python l'ait.
Oui, mais si c'est ça, la sacro-sainte « intuitivité » du langage un
prend un sacré coup sur le museau parce que s'il faut se rappeler des
orthographes particulières de chaque classe, c'est quand même un peu
moyen pour un langage moderne. J'ai même beaucoup de mal à croire
qu'il en soit ainsi, d'ailleurs : C, C++, Java etc. n'ayant pas ce
défaut, je comprendrais mal que Python l'ait.
Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs.
Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs.
Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs.
Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs. C'est du ressort du choix des développeurs
et des normes qu'ils ont l'habitude d'appliquer.
C'est vrai que Java - au moins pour les noms des classes - a essayé de
définir des normes qui sont relativement respectées.
Mais il y a la même chose pour Python:
http://www.python.org/peps/pep-0008.html ... qui laisse quand même une
grande liberté "The naming conventions of Python's library are a bit of
a mess" :-)
Enfin, le langage n'empêche pas de lire la doc - au moins pour avoir les
noms des modules et classes dont on a besoin. Après, l'intuitivité de
Python se trouve plutôt sur tout ce qui est itérations, notations
d'indexs & Co.
Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs. C'est du ressort du choix des développeurs
et des normes qu'ils ont l'habitude d'appliquer.
C'est vrai que Java - au moins pour les noms des classes - a essayé de
définir des normes qui sont relativement respectées.
Mais il y a la même chose pour Python:
http://www.python.org/peps/pep-0008.html ... qui laisse quand même une
grande liberté "The naming conventions of Python's library are a bit of
a mess" :-)
Enfin, le langage n'empêche pas de lire la doc - au moins pour avoir les
noms des modules et classes dont on a besoin. Après, l'intuitivité de
Python se trouve plutôt sur tout ce qui est itérations, notations
d'indexs & Co.
Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs. C'est du ressort du choix des développeurs
et des normes qu'ils ont l'habitude d'appliquer.
C'est vrai que Java - au moins pour les noms des classes - a essayé de
définir des normes qui sont relativement respectées.
Mais il y a la même chose pour Python:
http://www.python.org/peps/pep-0008.html ... qui laisse quand même une
grande liberté "The naming conventions of Python's library are a bit of
a mess" :-)
Enfin, le langage n'empêche pas de lire la doc - au moins pour avoir les
noms des modules et classes dont on a besoin. Après, l'intuitivité de
Python se trouve plutôt sur tout ce qui est itérations, notations
d'indexs & Co.
Laurent Pointal writes:Je dirais que c'est historique.
C'est ce je craignais... mais si c'est historique, pourquoi les
évolutions du langage n'ont pas intégré de wrappers pour unifier
l'existant ?
Les types de base (qui sont des classes!) sont en minuscules.
Les type définis dans des modules tiers utilisent en général des
majuscules au début des mots (mais comme toute règle générale, on doit
sûrement pouvoir y trouver de exceptions).
Certains types étaient précédement dispos dans des modules séparés (ex.
Set, FrozenSet) et sont passés en minuscules lorsqu'ils ont été passé en
builtins (set, frozenset en 2.4).
Oui, mais si c'est ça, la sacro-sainte « intuitivité » du langage un
prend un sacré coup sur le museau parce que s'il faut se rappeler des
orthographes particulières de chaque classe, c'est quand même un peu
moyen pour un langage moderne. J'ai même beaucoup de mal à croire
qu'il en soit ainsi, d'ailleurs : C, C++, Java etc. n'ayant pas ce
défaut, je comprendrais mal que Python l'ait.
Laurent Pointal <laurent.pointal@limsi.fr> writes:
Je dirais que c'est historique.
C'est ce je craignais... mais si c'est historique, pourquoi les
évolutions du langage n'ont pas intégré de wrappers pour unifier
l'existant ?
Les types de base (qui sont des classes!) sont en minuscules.
Les type définis dans des modules tiers utilisent en général des
majuscules au début des mots (mais comme toute règle générale, on doit
sûrement pouvoir y trouver de exceptions).
Certains types étaient précédement dispos dans des modules séparés (ex.
Set, FrozenSet) et sont passés en minuscules lorsqu'ils ont été passé en
builtins (set, frozenset en 2.4).
Oui, mais si c'est ça, la sacro-sainte « intuitivité » du langage un
prend un sacré coup sur le museau parce que s'il faut se rappeler des
orthographes particulières de chaque classe, c'est quand même un peu
moyen pour un langage moderne. J'ai même beaucoup de mal à croire
qu'il en soit ainsi, d'ailleurs : C, C++, Java etc. n'ayant pas ce
défaut, je comprendrais mal que Python l'ait.
Laurent Pointal writes:Je dirais que c'est historique.
C'est ce je craignais... mais si c'est historique, pourquoi les
évolutions du langage n'ont pas intégré de wrappers pour unifier
l'existant ?
Les types de base (qui sont des classes!) sont en minuscules.
Les type définis dans des modules tiers utilisent en général des
majuscules au début des mots (mais comme toute règle générale, on doit
sûrement pouvoir y trouver de exceptions).
Certains types étaient précédement dispos dans des modules séparés (ex.
Set, FrozenSet) et sont passés en minuscules lorsqu'ils ont été passé en
builtins (set, frozenset en 2.4).
Oui, mais si c'est ça, la sacro-sainte « intuitivité » du langage un
prend un sacré coup sur le museau parce que s'il faut se rappeler des
orthographes particulières de chaque classe, c'est quand même un peu
moyen pour un langage moderne. J'ai même beaucoup de mal à croire
qu'il en soit ainsi, d'ailleurs : C, C++, Java etc. n'ayant pas ce
défaut, je comprendrais mal que Python l'ait.
Laurent Pointal writes:Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs. C'est du ressort du choix des développeurs
et des normes qu'ils ont l'habitude d'appliquer.
Si, il y en a... En Haskell, par exemple, tu n'as pas le choix, en
Ruby non plus. En Haskell (dont s'inspire pourtant Python sur certains
points), ce qui commence par une majuscule est un type, le reste est
un identificateur de fonction ou de variable ; en Ruby, tout ce qui
commence par une majuscule est soit une constante, soit un nom de
classe. Le reste doit commencer par une minuscule (pour faire court).
Je ne vois pas pourquoi on *obligerait* à indenter alors qu'on
n'oblige pas à respecter une casse, ce n'est pas cohérent.
C'est vrai que Java - au moins pour les noms des classes - a essayé de
définir des normes qui sont relativement respectées.
Elles le sont en pratique, en tous cas dans l'API fournie, je suis désolé.
Enfin, le langage n'empêche pas de lire la doc - au moins pour avoir les
noms des modules et classes dont on a besoin. Après, l'intuitivité de
Python se trouve plutôt sur tout ce qui est itérations, notations
d'indexs & Co.
Moué... enfin... je suis très très déçu, là :(
Laurent Pointal <laurent.pointal@limsi.fr> writes:
Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs. C'est du ressort du choix des développeurs
et des normes qu'ils ont l'habitude d'appliquer.
Si, il y en a... En Haskell, par exemple, tu n'as pas le choix, en
Ruby non plus. En Haskell (dont s'inspire pourtant Python sur certains
points), ce qui commence par une majuscule est un type, le reste est
un identificateur de fonction ou de variable ; en Ruby, tout ce qui
commence par une majuscule est soit une constante, soit un nom de
classe. Le reste doit commencer par une minuscule (pour faire court).
Je ne vois pas pourquoi on *obligerait* à indenter alors qu'on
n'oblige pas à respecter une casse, ce n'est pas cohérent.
C'est vrai que Java - au moins pour les noms des classes - a essayé de
définir des normes qui sont relativement respectées.
Elles le sont en pratique, en tous cas dans l'API fournie, je suis désolé.
Enfin, le langage n'empêche pas de lire la doc - au moins pour avoir les
noms des modules et classes dont on a besoin. Après, l'intuitivité de
Python se trouve plutôt sur tout ce qui est itérations, notations
d'indexs & Co.
Moué... enfin... je suis très très déçu, là :(
Laurent Pointal writes:Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs. C'est du ressort du choix des développeurs
et des normes qu'ils ont l'habitude d'appliquer.
Si, il y en a... En Haskell, par exemple, tu n'as pas le choix, en
Ruby non plus. En Haskell (dont s'inspire pourtant Python sur certains
points), ce qui commence par une majuscule est un type, le reste est
un identificateur de fonction ou de variable ; en Ruby, tout ce qui
commence par une majuscule est soit une constante, soit un nom de
classe. Le reste doit commencer par une minuscule (pour faire court).
Je ne vois pas pourquoi on *obligerait* à indenter alors qu'on
n'oblige pas à respecter une casse, ce n'est pas cohérent.
C'est vrai que Java - au moins pour les noms des classes - a essayé de
définir des normes qui sont relativement respectées.
Elles le sont en pratique, en tous cas dans l'API fournie, je suis désolé.
Enfin, le langage n'empêche pas de lire la doc - au moins pour avoir les
noms des modules et classes dont on a besoin. Après, l'intuitivité de
Python se trouve plutôt sur tout ce qui est itérations, notations
d'indexs & Co.
Moué... enfin... je suis très très déçu, là :(
Laurent Pointal writes:Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs. C'est du ressort du choix des développeurs
et des normes qu'ils ont l'habitude d'appliquer.
Si, il y en a... En Haskell, par exemple, tu n'as pas le choix, en
Ruby non plus. En Haskell (dont s'inspire pourtant Python sur certains
points), ce qui commence par une majuscule est un type, le reste est
un identificateur de fonction ou de variable ; en Ruby, tout ce qui
commence par une majuscule est soit une constante, soit un nom de
classe. Le reste doit commencer par une minuscule (pour faire court).
Je ne vois pas pourquoi on *obligerait* à indenter alors qu'on
n'oblige pas à respecter une casse, ce n'est pas cohérent.
C'est vrai que Java - au moins pour les noms des classes - a essayé de
définir des normes qui sont relativement respectées.
Elles le sont en pratique, en tous cas dans l'API fournie, je suis désolé.Mais il y a la même chose pour Python:
http://www.python.org/peps/pep-0008.html ... qui laisse quand même une
grande liberté "The naming conventions of Python's library are a bit of
a mess" :-)
Voilà, mais un "bit of a mess", j'appelle ça un gros bordel et une
syntaxe non cohérente, moi ;)Enfin, le langage n'empêche pas de lire la doc - au moins pour avoir les
noms des modules et classes dont on a besoin. Après, l'intuitivité de
Python se trouve plutôt sur tout ce qui est itérations, notations
d'indexs & Co.
Moué... enfin... je suis très très déçu, là :(
Laurent Pointal <laurent.pointal@limsi.fr> writes:
Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs. C'est du ressort du choix des développeurs
et des normes qu'ils ont l'habitude d'appliquer.
Si, il y en a... En Haskell, par exemple, tu n'as pas le choix, en
Ruby non plus. En Haskell (dont s'inspire pourtant Python sur certains
points), ce qui commence par une majuscule est un type, le reste est
un identificateur de fonction ou de variable ; en Ruby, tout ce qui
commence par une majuscule est soit une constante, soit un nom de
classe. Le reste doit commencer par une minuscule (pour faire court).
Je ne vois pas pourquoi on *obligerait* à indenter alors qu'on
n'oblige pas à respecter une casse, ce n'est pas cohérent.
C'est vrai que Java - au moins pour les noms des classes - a essayé de
définir des normes qui sont relativement respectées.
Elles le sont en pratique, en tous cas dans l'API fournie, je suis désolé.
Mais il y a la même chose pour Python:
http://www.python.org/peps/pep-0008.html ... qui laisse quand même une
grande liberté "The naming conventions of Python's library are a bit of
a mess" :-)
Voilà, mais un "bit of a mess", j'appelle ça un gros bordel et une
syntaxe non cohérente, moi ;)
Enfin, le langage n'empêche pas de lire la doc - au moins pour avoir les
noms des modules et classes dont on a besoin. Après, l'intuitivité de
Python se trouve plutôt sur tout ce qui est itérations, notations
d'indexs & Co.
Moué... enfin... je suis très très déçu, là :(
Laurent Pointal writes:Je ne connais aucun langage qui *oblige* à des usages particuliers pour
définir les identificateurs. C'est du ressort du choix des développeurs
et des normes qu'ils ont l'habitude d'appliquer.
Si, il y en a... En Haskell, par exemple, tu n'as pas le choix, en
Ruby non plus. En Haskell (dont s'inspire pourtant Python sur certains
points), ce qui commence par une majuscule est un type, le reste est
un identificateur de fonction ou de variable ; en Ruby, tout ce qui
commence par une majuscule est soit une constante, soit un nom de
classe. Le reste doit commencer par une minuscule (pour faire court).
Je ne vois pas pourquoi on *obligerait* à indenter alors qu'on
n'oblige pas à respecter une casse, ce n'est pas cohérent.
C'est vrai que Java - au moins pour les noms des classes - a essayé de
définir des normes qui sont relativement respectées.
Elles le sont en pratique, en tous cas dans l'API fournie, je suis désolé.Mais il y a la même chose pour Python:
http://www.python.org/peps/pep-0008.html ... qui laisse quand même une
grande liberté "The naming conventions of Python's library are a bit of
a mess" :-)
Voilà, mais un "bit of a mess", j'appelle ça un gros bordel et une
syntaxe non cohérente, moi ;)Enfin, le langage n'empêche pas de lire la doc - au moins pour avoir les
noms des modules et classes dont on a besoin. Après, l'intuitivité de
Python se trouve plutôt sur tout ce qui est itérations, notations
d'indexs & Co.
Moué... enfin... je suis très très déçu, là :(
C'est ce je craignais... mais si c'est historique, pourquoi les
évolutions du langage n'ont pas intégré de wrappers pour unifier
l'existant ?
Bonne question. Peut-être pour éviter de casser du code existant ?
Faire évoluer un langage dans tout casser n'est pas une chose aisée - à
moins qu'il n'y ait pas d'utilisateurs du langage, bien sûr. Quand
l'évolution touche à quelque chose d'aussi essentiel que la
représentation interne, c'est encore plus délicat.
NB : sur le fond, je suis d'accord que c'est ch... et moche et pas
intuitif, et j'espère que p3k corrigera ça (BTW, il serait peut-être bon
d'évoquer le sujet sur le wiki concerné).
C'est ce je craignais... mais si c'est historique, pourquoi les
évolutions du langage n'ont pas intégré de wrappers pour unifier
l'existant ?
Bonne question. Peut-être pour éviter de casser du code existant ?
Faire évoluer un langage dans tout casser n'est pas une chose aisée - à
moins qu'il n'y ait pas d'utilisateurs du langage, bien sûr. Quand
l'évolution touche à quelque chose d'aussi essentiel que la
représentation interne, c'est encore plus délicat.
NB : sur le fond, je suis d'accord que c'est ch... et moche et pas
intuitif, et j'espère que p3k corrigera ça (BTW, il serait peut-être bon
d'évoquer le sujet sur le wiki concerné).
C'est ce je craignais... mais si c'est historique, pourquoi les
évolutions du langage n'ont pas intégré de wrappers pour unifier
l'existant ?
Bonne question. Peut-être pour éviter de casser du code existant ?
Faire évoluer un langage dans tout casser n'est pas une chose aisée - à
moins qu'il n'y ait pas d'utilisateurs du langage, bien sûr. Quand
l'évolution touche à quelque chose d'aussi essentiel que la
représentation interne, c'est encore plus délicat.
NB : sur le fond, je suis d'accord que c'est ch... et moche et pas
intuitif, et j'espère que p3k corrigera ça (BTW, il serait peut-être bon
d'évoquer le sujet sur le wiki concerné).
Je ne vois pas pourquoi on *obligerait* à indenter alors qu'on
n'oblige pas à respecter une casse, ce n'est pas cohérent.
Tu va un peu vite, là. je suis d'accord sur le fait qu'il n'est pas
forcément plus idiot d'intégrer cette règle dans la grammaire que celle
concernant l'indentation, mais je ne vois absolument pas en quoi faire
l'autre sans l'un (ou l'un sans l'autre) serait "incohérent".
Les noms des *classes*, oui. Ceux des types "builtin" (int, float etc)
ne suivent pas cette convention. En python (>= 2.2), la principale
différence entre types builtins et types utilisateurs est la casse. En
Java, cette différence est bien plus importante, et ça n'a pas l'air de
te gêner !-)
Par contre, tu trouves normal que Java - qui est partout présenté
comme *le* langage 'objet' de référence - ait des types builtins qui
se comportent très différemment des types utilisateurs ?
La casses des types builtins, c'est un rien cosmétique...
Je ne vois pas pourquoi on *obligerait* à indenter alors qu'on
n'oblige pas à respecter une casse, ce n'est pas cohérent.
Tu va un peu vite, là. je suis d'accord sur le fait qu'il n'est pas
forcément plus idiot d'intégrer cette règle dans la grammaire que celle
concernant l'indentation, mais je ne vois absolument pas en quoi faire
l'autre sans l'un (ou l'un sans l'autre) serait "incohérent".
Les noms des *classes*, oui. Ceux des types "builtin" (int, float etc)
ne suivent pas cette convention. En python (>= 2.2), la principale
différence entre types builtins et types utilisateurs est la casse. En
Java, cette différence est bien plus importante, et ça n'a pas l'air de
te gêner !-)
Par contre, tu trouves normal que Java - qui est partout présenté
comme *le* langage 'objet' de référence - ait des types builtins qui
se comportent très différemment des types utilisateurs ?
La casses des types builtins, c'est un rien cosmétique...
Je ne vois pas pourquoi on *obligerait* à indenter alors qu'on
n'oblige pas à respecter une casse, ce n'est pas cohérent.
Tu va un peu vite, là. je suis d'accord sur le fait qu'il n'est pas
forcément plus idiot d'intégrer cette règle dans la grammaire que celle
concernant l'indentation, mais je ne vois absolument pas en quoi faire
l'autre sans l'un (ou l'un sans l'autre) serait "incohérent".
Les noms des *classes*, oui. Ceux des types "builtin" (int, float etc)
ne suivent pas cette convention. En python (>= 2.2), la principale
différence entre types builtins et types utilisateurs est la casse. En
Java, cette différence est bien plus importante, et ça n'a pas l'air de
te gêner !-)
Par contre, tu trouves normal que Java - qui est partout présenté
comme *le* langage 'objet' de référence - ait des types builtins qui
se comportent très différemment des types utilisateurs ?
La casses des types builtins, c'est un rien cosmétique...