Un module et un script principal

Le
Xavier Maillard
Bonsoir,

j'ai fait mes grans débuts en python il y a peu et je coince sur
certains points.

Le cas du jour, je vous le présente brièvement.

J'ai écrit un module (w9n.py) qui définit plusieurs classes et
notamment des classes d'exception.

Le script principal charge le module par la directive suivante:

import w9n

Plus loin, dans le __main__ de mon script principal, j'essaie bêtement
d'utiliser certaines classes et j'obtiens toujours la même erreur:

Traceback (most recent call last):
File "./DBA_mys.py", line 85, in <module>
tool = W9NTool()
NameError: name 'W9NTool' is not defined

Je crois comprendre qu'il faut que je "préfixe" par le nom du fichier
soit w9n.W9NTool() mais j'ai bien peur qu'à la longue cela devienne
vite fastidieux et notamment pour la partie gestion des exceptions.

Comment faire pour ne pas avoir à "préfixer" mes appels de
fonctions/méthodes/classes depuis mon script principal ?

Merci

Xavier

P.S: connaissez-vous un (excellent) tutoriel présentant concrètement
et très simplement la mise en place de TDD (Test Driven Development)
en python ? Je cherche à faire quelque chose de propre (merci python)
et à donner un maximum de garanties quant à la qualité du code (encore
une fois merci python). Mon soucis étant que je ne suis pas très au
fait sur ce genre de pratique et surtout j'ai peur de ne pas faire les
tests adéquats.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pierre Quentel
Le #19345341
On 16 mai, 00:34, Xavier Maillard
Bonsoir,

j'ai fait mes grans débuts en python il y a peu et je coince sur
certains points.

Le cas du jour, je vous le présente brièvement.

J'ai écrit un module (w9n.py) qui définit plusieurs classes et
notamment des classes d'exception.

Le script principal charge le module par la directive suivante:

import w9n

Plus loin, dans le __main__ de mon script principal, j'essaie bêtement
d'utiliser certaines classes et j'obtiens toujours la même erreur:

Traceback (most recent call last):
  File "./DBA_mys.py", line 85, in <module>
    tool = W9NTool()
NameError: name 'W9NTool' is not defined

Je crois comprendre qu'il faut que je "préfixe" par le nom du fichier
soit w9n.W9NTool() mais j'ai bien peur qu'à la longue cela devienne
vite fastidieux et notamment pour la partie gestion des exceptions.

Comment faire pour ne pas avoir à "préfixer" mes appels de
fonctions/méthodes/classes depuis mon script principal ?

Merci

Xavier

P.S: connaissez-vous un (excellent) tutoriel présentant concrètement
et très simplement la mise en place de TDD (Test Driven Development)
en python ? Je cherche à faire quelque chose de propre (merci python)
et à donner un maximum de garanties quant à la qualité du code (enc ore
une fois merci python). Mon soucis étant que je ne suis pas très au
fait sur ce genre de pratique et surtout j'ai peur de ne pas faire les
tests adéquats.



Bonjour,

Si tu veux importer un nom depuis un module :

from w9n import W9NTool

Pour importer tous les noms d'un mdule :

from w9n import *

- Pierre
Bruno Desthuilliers
Le #19347121
Pierre Quentel a écrit :
On 16 mai, 00:34, Xavier Maillard
Bonsoir,

j'ai fait mes grans débuts en python il y a peu et je coince sur
certains points.

Le cas du jour, je vous le présente brièvement.

J'ai écrit un module (w9n.py) qui définit plusieurs classes et
notamment des classes d'exception.

Le script principal charge le module par la directive suivante:

import w9n

Plus loin, dans le __main__ de mon script principal, j'essaie bêtement
d'utiliser certaines classes et j'obtiens toujours la même erreur:

Traceback (most recent call last):
File "./DBA_mys.py", line 85, in <module>
tool = W9NTool()
NameError: name 'W9NTool' is not defined

Je crois comprendre qu'il faut que je "préfixe" par le nom du fichier
soit w9n.W9NTool() mais j'ai bien peur qu'à la longue cela devienne
vite fastidieux et notamment pour la partie gestion des exceptions.

Comment faire pour ne pas avoir à "préfixer" mes appels de
fonctions/méthodes/classes depuis mon script principal ?

Merci

Xavier

P.S: connaissez-vous un (excellent) tutoriel présentant concrètement
et très simplement la mise en place de TDD (Test Driven Development)
en python ? Je cherche à faire quelque chose de propre (merci python)
et à donner un maximum de garanties quant à la qualité du code (encore
une fois merci python). Mon soucis étant que je ne suis pas très au
fait sur ce genre de pratique et surtout j'ai peur de ne pas faire les
tests adéquats.



Bonjour,

Si tu veux importer un nom depuis un module :

from w9n import W9NTool

Pour importer tous les noms d'un mdule :

from w9n import *



Attention toutefois, cette méthode a deux inconvénients:

1/ par défaut, tous les noms existant dans l'espace de nommage de w9n
seront importés (à l'exception de ceux débutant par un '_'). Donc si w9n
importe lui-même les noms 'foo' et 'bar', l'instruction ci-dessus
importera également 'foo' et 'bar' (nb: ça peut être réglé en
définissant la variable __all__ dans w9n, se référer à la doc).

2/ ça ne permet pas de savoir clairement ce qui est importé et d'où
c'est importé.

Donc préférer autant que possible des imports explicites:

from w9n import Name1, Name2 (,... NameN)



- Pierre


jeremie fouche
Le #19346461
Xavier Maillard a écrit :

P.S: connaissez-vous un (excellent) tutoriel présentant concrètement
et très simplement la mise en place de TDD (Test Driven Development)
en python ? Je cherche à faire quelque chose de propre (merci python)
et à donner un maximum de garanties quant à la qualité du code (encore
une fois merci python). Mon soucis étant que je ne suis pas très au
fait sur ce genre de pratique et surtout j'ai peur de ne pas faire les
tests adéquats.



Dive into python m'a beaucoup aidé :
http://www.diveintopython.org/

et plus particulierement, ence qui te concerne :
http://diveintopython.org/unit_testing/index.html

--
Jérémie
Xavier Maillard
Le #19348451
At Sat, 16 May 2009 11:40:44 +0200,
jeremie fouche wrote:

Xavier Maillard a écrit :

> P.S: connaissez-vous un (excellent) tutoriel présentant concrètement
> et très simplement la mise en place de TDD (Test Driven Development)
> en python ? Je cherche à faire quelque chose de propre (merci python)
> et à donner un maximum de garanties quant à la qualité du code (enco re
> une fois merci python). Mon soucis étant que je ne suis pas très au
> fait sur ce genre de pratique et surtout j'ai peur de ne pas faire les
> tests adéquats.

Dive into python m'a beaucoup aidé :
http://www.diveintopython.org/

et plus particulierement, ence qui te concerne :
http://diveintopython.org/unit_testing/index.html



Merci pour ces références.

Xavier
Xavier Maillard
Le #19349861
At Fri, 15 May 2009 23:07:52 -0700 (PDT),
Pierre Quentel wrote:

Si tu veux importer un nom depuis un module :

from w9n import W9NTool

Pour importer tous les noms d'un mdule :

from w9n import *



Quelle est la différence avec un simple:

import w9n

?

Xavier
Pierre Quentel
Le #19350051
On 16 mai, 21:35, Xavier Maillard
At Fri, 15 May 2009 23:07:52 -0700 (PDT),

Pierre Quentel wrote:

> Si tu veux importer un nom depuis un module :

>     from w9n import W9NTool

> Pour importer tous les noms d'un mdule :

>     from w9n import *

Quelle est la différence avec un simple:

import w9n

?

Xavier



Quand on fait "import w9n", le seul nom disponible dans l'espace de
noms du script principal est w9n ; avec "from w9n import w9NTool" le
nom disponible dans l'espace de noms est w9NTools, mais *pas* w9n

- Pierre
Xavier Maillard
Le #19352401
At Sat, 16 May 2009 13:02:35 -0700 (PDT),
Pierre Quentel wrote:

On 16 mai, 21:35, Xavier Maillard > At Fri, 15 May 2009 23:07:52 -0700 (PDT),
>
> Pierre Quentel wrote:
>
> > Si tu veux importer un nom depuis un module :
>
> >     from w9n import W9NTool
>
> > Pour importer tous les noms d'un mdule :
>
> >     from w9n import *
>
> Quelle est la différence avec un simple:
>
> import w9n
>
> ?
>
> Xavier

Quand on fait "import w9n", le seul nom disponible dans l'espace de
noms du script principal est w9n ; avec "from w9n import w9NTool" le
nom disponible dans l'espace de noms est w9NTools, mais *pas* w9n



D'accord. Donc si je comprends bien, pour résoudre mon problème il me
suffirait aux choix de faire un import * ou bien l'import que je fais
deja mais en prenant soin de définir la variable __all__. C'est bien
cela ?

Pourquoi python ne prevoit pas une valeur "par defaut" pour cette
variable ?

Xavier
Publicité
Poster une réponse
Anonyme