Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/03/2007, à 15:30

Gari

Python strict

Bonjour à tous,

ça fait maintenatn quelques semaines que je m'intéresse à Python, et je trouve que c'est langage bien sympa.
Cependant, il y a plusieurs choses qui gênent, notamment la trop grande permissivité du langage (pas de déclaration de variables, pas de concept de variable privée, etc.).
Est-ce qu'il existe une version "stricte" de python (j'ai pris le terme "strict" utilisé en HTML en fait) ?

Cela pourrait par exemple être un simple lecteur de source python qui vérifie que certaines règles sont respectées, par exemple.
Entre autres :
- interdiction d'utiliser des variables de classe hors de la classe
- toujours déclarer des variables avant de les utiliser (par exemple, en les initialisant à None avant toute utilisation)
- etc. (ya sûrement d'autres possibilités).

Merci !

Hors ligne

#2 Le 20/03/2007, à 17:53

aleph

Re : Python strict

> Gari
...ça fait maintenatn quelques semaines que je m'intéresse à Python,...

Au vu de l'ensemble de tes messages traitant de Python, j'ai l'impression très nette que

1) tu sais coder en Python, mais...
2) tu n'as pas compris ce qu'est Python, comment il fonctionne et pourquoi il fonctionne tel qu'il est aujourd'hui.

Aucun reproche dans mes propos. Un bon bouquin et surtout de l'expérience aideront.


Je crois que contrairement à ce qu'on lit souvent, Python n'est pas un langage simple. il inclut toutes les subtilités d'un langage moderne (classe, ...) et utilise aussi des choses plus anciennes (list compréhension...). Le plus de Python réside peut-être dans son élégance.

Python repose sur le principe que le programmeur sait ce qu'il fait et c'est peut-être là que le bât blesse, car cela nécessite une bonne connaissance des rouages de la programmation. Etonnament, il est possible d'acquérir toutes ces bases en apprenant Python.

> ...grande permissivité du langage...
Voir paragraphe précédent

>... pas de déclaration de variables
Parce ce que Python est conçu ainsi. A noter, que contrairement à ce qu'on lit souvent, Python est un langage fortement typé.

> pas de concept de variable privée
Pouquoi s'encombrer de variables déclarées privées ou publiques si l'on sait ce que l'on fait.

> Est-ce qu'il existe une version "stricte" de python
Pas à ma connaissance, ce ne serait plus Python.

>simple lecteur de source python qui vérifie que certaines règles sont respectées,
Il existe des utilitaires comme pychecker qui vérifie le code. Aucune expérience, car je ne les utilise jamais.

> interdiction d'utiliser des variables de classe hors de la classe
C'est tout à fait possible.

class foo():
    n = 0
    def __init__(self):
        foo.n = 999
        
f = foo()
print f.n
999

> toujours déclarer des variables avant de les utiliser
Justement, pas nécessaire avec Python, puisque il est fait ainsi.

>...en les initialisant à None avant toute utilisation
A nouveau, cela repose sur le développeur Python. S'il juge nécessaire de le faire, il le fera.

Ce que tu proposes revient à rendre Python "antipythonique". Si ces qualités intrinsèques ne te conviennent pas - ce que je conçois- , alors Python n'est pas pour toi. Tourne-toi vers des langages plus stricts comme ADA, pascal ou Modula.

#3 Le 20/03/2007, à 18:16

Gari

Re : Python strict

Salut Aleph, et merci de t'intéresser ainsi à mes message wink

Je suis totalement d'accord avec tout ce que tu as dit, et je ne remets pas Python en cause. D'ailleurs, si je n'appréciais pas Python, j'aurais déjà laissé tomber. Et je n'ai pas envie de délaisser Python sous pretexte qu'il y a deux ou trois détails que j'aimerais changer : dans l'ensemble, c'est un langage qui me convient tout à fait.

Je trouve cependant mon idée intéressante, parce qu'elle permettrait au développeur lui-même de choisir sa méthode de programmation, en créant un cadre dans lequel il serait forcé de rester. Je considère, de mon côté, que le développeur est faillible, et qu'utiliser un outil le forçant à respecter ses propres règles serait vraiment un gros avantage.

Encore une fois, je me base sur le HTML dans lequel, suivant le doctype que tu mets en entête (strict ou pas strict, etc), le validateur w3 ne te dira pas la même chose (une erreur dans un cas n'en sera pas une dans un autre). Je ne parle donc pas de faire differentes versions de Python, mais bel et bien de faire un petit vérificateur (oui, à la pychecker en fait) qui permette d'implémenter certaines règles prédéfinies que le développeur pourrait activer ou pas.

Quand aux rouages de la programmation, je pense que je m'en sors pas trop mal . Il est vrai que je suis très influencé par le C, ayant baigné exclusivement dans ce langage depuis que je m'intéresse à l'informatique, ce qui notamment provoqué mon problème de documentation dont j'ai parlé dans un autre fil (et je reste convaincu que l'obligation de lire 4 pages différentes pour se renseigner sur une fonction est plus compliqué qu'en lire une, à ce propos).

En tout cas, merci encore de t'attarder sur mon cas ^^

Gari.

PS : je relis ton message, et je tombe sur ton petit code sur "foo". C'est *justement* ça que je voudrais interdire, l'utilisation d'une variable d'une classe hors de la classe. Bien sûr, le développeur peut se l'auto-interdire, mais c'est tellement plus simple d'avoir un script qui permette de vérifier qu'on a bien obéi à ses propres règles...

Dernière modification par Gari (Le 20/03/2007, à 18:18)

Hors ligne

#4 Le 20/03/2007, à 18:43

aleph

Re : Python strict

> Gari
PS : je relis ton message, et je tombe sur ton petit code sur "foo". C'est *justement* ça que je voudrais interdire, l'utilisation d'une variable d'une classe hors de la classe. Bien sûr, le développeur peut se l'auto-interdire, mais c'est tellement plus simple d'avoir un script qui permette de vérifier qu'on a bien obéi à ses propres règles...

---

Oh que non ! C'est pourquoi il y a des data attributes et des class attributes.

Maintenant si le coeur t'en dis: http://www.python.org/dev/peps/

#5 Le 20/03/2007, à 19:01

naholyr

Re : Python strict

Je parle de mémoire, mais il me semble que l'on peut très bien développer des getters et setters, et rendre privée des membres d'instance, mais c'est une manoeuvre presque proche de la bidouille tant elle n'est pas naturelle.

En tous cas je ne l'utilise jamais, il est tellement plus simple de nommer les variable "__X" pour les privées wink Les conventions de nommage remplacent avantageusement toutes les règles strictes.

Hors ligne

#6 Le 20/03/2007, à 23:26

Gari

Re : Python strict

Certes Naholyr, mais tu vas dire que je suis plutôt casse-couille, mais le coup du double underscore, ça me plait pas non plus ^^
Bon ok, je sors.

Nan mais je pense que j'ai le syndrôme du "windowsien" : je suis habitué à mon ptit confort sur C et le fait que ça change me donne l'impression d'être un poisson hors de l'eau.

Bref, je maintiens toujours mes positions, mais j'me dis qu'une fois que j'aurais pris le coup ça ira tout seul smile

Et puis, j'ai pas encore fini le gros volume sur Python que j'ai sur ma table de chevet, alors je vais y retourner et continuer à apprendre des trucs smile

Hors ligne

#7 Le 21/03/2007, à 00:00

naholyr

Re : Python strict

T'es plutôt casse-couille lol

Hors ligne

#8 Le 21/03/2007, à 10:05

aleph

Re : Python strict

> Gari

Sans vouloir te vexer, tes commentaires sur le langage Python me laissent un peu perplexe. Il y a  moins d'une semaine tu ne savais même pas où était la documentation de Python ! Python a été construit patiemment pendant 17 ans (eh oui, avant Java), 18 mois pour mettre au point la dernière version. Tu devrais aussi comprendre que tes remarques dues à un manque d'expérience sont assez légères.

> Et puis, j'ai pas encore fini le gros volume sur Python que j'ai sur ma table de chevet, alors je vais y retourner et continuer à apprendre des trucs

La majorité de tes questions et remarques sont traitées dans le tutoriel, par ex. les attributs de classe (je viens de le vérifier). C'est peut-être par là qu'il faudrait commencer ?

> naholyr

Getters/setters en Python :

# -*- coding: iso-8859-1 -*-

class foo(object):
    """class foo"""
    
    def __init__(self, value):
        """<foo>.__init__(self, value) -> None
        """
        self.n = value
    
    def setn(self, value):
        self.__n = value
    
    def getn(self):
        return self.__n

    n = property(getn, setn, doc="Valeur interne de n.")

if __name__ == '__main__':
    f = foo(111)
    print f.n
    f.n = 999
    print f.n
    print '---'
    print foo.__doc__
    print foo.n.__doc__
    print foo.__init__.__doc__

Ce qui donne à l'éxécution :

111
999
---
class foo
Valeur interne de n.
<foo>.__init__(self, value) -> None

> En tous cas je ne l'utilise jamais, il est tellement plus simple de nommer les variable "__X" pour les privées

Le but des getters/setters n'est pas lié à la privatisation des variables. Cette stratégie de travail permet de résoudre élégamment et parfois contourner les invonvénients des __setitem__ / __getitem__.

Un exemple parmi d'autres: le module psigraph qui permet de tracer interactivement des données depuis un shell Python, http://spinecho.ifrance.com/psi.html

#9 Le 21/03/2007, à 22:37

Gari

Re : Python strict

> Aleph.
Je suis conscient que je suis un jeune débutant sous Python, par contre je ne comprends pas pourquoi tu dis "tes commentaires sur le langage Python me laissent un peu perplexe" et "Tu devrais aussi comprendre que tes remarques dues à un manque d'expérience sont assez légères". Je n'ai à aucun moment dis que Python était nul, ou mal écris, ou fais un quelconque reproche à son égard.

Il me semble qu'à chaque fois j'ai bien dit quelque chose du genre "Ca ne ME plait pas", ce qui ME mets en cause, et certainement pas Python. En outre, avant de me mettre à Python il y a quelques semaines, j'ai regardé le panel de langages répandus qui sont proposés sur le net, et c'est de cette observation que j'ai choisi Python. C'est donc que je pense que Python vaut le coup smile
Je plaide cependant coupable pour mon manque d'expérience et ma façon peut-être pas assez diplomatique de venir parler de Python ici (je n'ai pas pris de pincettes tout simplement parce que je ne pensais pas qu'on pourrait interpréter mes propos comme étant anti-python). Si mon discours t'as choqué, je te présente mes excuses (sincèrement).

En ce moment, je pense que je maitrise la partie "non objet" de Python. Et donc, toutes les subtilités de classes me sont encore bien fermées... Promis promis, je ne viendrai plus dire un truc avant d'avoir terminé mon livre de chevet !

Hors ligne

#10 Le 21/03/2007, à 23:04

naholyr

Re : Python strict

Ben en Python, tout étant objet, comment peux-tu maîtriser la partie non objet ? tongue

Hors ligne

#11 Le 21/03/2007, à 23:41

Gari

Re : Python strict

Grrr tu as très bien compris ce que je voulais dire, sacripant smile

Hors ligne

#12 Le 22/03/2007, à 10:16

aleph

Re : Python strict

> Gari

Une courte réponse par politesse. J'ai utilisé le mot perplexe, parce que chacune de tes interventions laisse entendre que quelque chose dans Python ne joue pas ou que Python devrait faire autrement. C'est tout.

J'ai aussi été débutant (Python 1.5.2 CNRI), profil actuel: Python 2.3, 2.4, 2.5 en parallèle sur w2k.

----

> naholyr
> Ben en Python, tout étant objet, comment peux-tu maîtriser la partie non objet ?

Pas du tout. Python permet la programmation orientée objet et la programmation procédurale. Et c'est une très bonne chose.

Dans le bouquin qu'étudie Gari la première partie est probablement consacrée à l'étude générale de Python (variables, fonctions, ...) avant d'aborder les notions de classes. Le tutoriel Python est aussi structuré ainsi. Il ne faut pas oublier qu'une des vocations premières de Python a été de créer un langage pédagogique. En cela, le tutoriel Python est une des meilleures introductions à la programmation qui existent.

Dans un application comme wese, http://spinecho.ifrance.com/wese.html, l'interface est programmée OO alors que toute la machinerie mathématique sous-jacente, le plus gros du travail, est faite de façon procédurale.

#13 Le 22/03/2007, à 10:19

naholyr

Re : Python strict

Bien sûr, mais il n'en reste pas moins que même si on code en "style" procédural, on crée des objets. C'est peut-être comme la prose de Monsieur Jourdain certes, mais on est quand-même dans un environnement où on manipule des objets.

Hors ligne

#14 Le 22/03/2007, à 10:42

aleph

Re : Python strict

Si tu codes une fonction comme

def a():
    print 'salut'

tu crées un object dans le sens "quelque chose", mais pas un objet dans le sens de la programmation orientée objet.  Idem avec un module "b.py" qui contiendrait uniquement la ligne

print 'salut'

D'ailleurs en Python, les modules ne sont pas de classes.

Autre façon de voir les choses, tu peux écrire des programmes en Python comme on le faisait/fait en Pascal ou FORTRAN, sans devoir connaître ce qu'est la programmation orientée objet.

#15 Le 22/03/2007, à 22:48

Gari

Re : Python strict

>Aleph

Il me semble que je n'ai fait que deux fils sur Python, l'un concernant la documentation (et je la trouve toujours un peu déroutante à prendre en main, mais ce n'est pas spécialement un reproche : je vais m'y faire, et puis voilà tout) et l'autre concernant le Python strict.

Concernant ce dernier point, je tiens à préciser que l'ensemble des entreprises dans lesquelles j'ai travaillé instaurent TOUTES des règles et des normes de programmation, qui ajoutent un nombre non négligeable de contraintes sur la programmation (façon d'écrire une variable ou une méthode, interdiction d'utiliser tel ou tel aspect du langage, etc.). Si elles font cela, c'est pour forcer les gens à n'utiliser qu'une seule manière de faire une chose, et de rendre le code aussi facile à maintenir que possible.
C'est dans cette optique que je parlais d'un "vérificateur" Python qui intègrerait des règles supplémentaires. Mais ce genre de chose pourrait être valable pour *tous* les langages de programmation.

Sinon, j'ai lu intégralement le Swinnen (Apprendre à Programmer), des tutoriaux simples sur le net (mais pas encore celui que tu m'as conseillé), ainsi que environ 120 pages du Ziadé. Et comme tu l'as noté à juste titre, jusque là les classes n'ont pour ainsi dire pas été abordées (à part comme de simples structures pouvant contenir méthodes et variables). Je viens à peine de commencer les trucs un peu plus compliqués (pour moi du moins : je n'ai pas une grande expérience de la programmation objet). Et effectivement, les notions mises en oeuvre me semblent très bien. Cela m'a permis de comprendre ton code sur les getters/setters, qui me semblent effectivement très bien smile

Hors ligne

#16 Le 22/03/2007, à 23:40

aleph

Re : Python strict

> Gari
> Concernant ce dernier point,....

Que veux-tu que je te dise...?

Voilà, bon vent.

La seule petite suggestion que je ferais est de lire la doc sur le module codecs, beaucoup de docs ou livres font l'impasse sur ce sujet. C'est assez étonnant, car c'est la seule façon en Python de lire les fichiers textes encodés en UTF-8 !

En effet, f = open(filename, mode) n'est pas correct et c'est très souvent la seule méthode donnée en exemple.