IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Différence entre "import abcd" et "from abcd import *"


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut Différence entre "import abcd" et "from abcd import *"
    Bonjour,

    Question stupide probablement ...
    Je n'arrive pas à voir la différence entre:
    et
    Or il est évident qu'il y a une différence car je viens d'essayer

    et
    Le comportement est très différent :

    en effet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from time import *
    print time()
    fonctionne bien alors que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import time
    print time()
    me dit que "time () is not callable"

    d'un autre coté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import time
    time.sleep(1.0)
    fonctionne alors que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from time import *
    time.sleep(1.)
    me dit que time n'a pas de méthode sleep

    Donc je ne vois quoi mettre pour faire fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # quoi mettre ici ??
    print time()
    time.sleep (1.)
    print time ()
    car si une instruction fonctionne l'autre ne fonctionne pas

    Si quelqu'un peut m'expliquer cela serait sympa !!!

    Bonne journée à tous

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Et bien sur tu est tomber sur le mauvais exemple puisque time comporte une méthode time...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> import time
    >>> print time.time
    <built-in function time>
    >>> print time.time()
    1272172159.78
    >>>
    Dans le cadre de import time tu dois faire time.time() (ou time.sleep(1)) pour acceder a ta méthode.

    Si tu fais from time import * tu integre les méthodes de time. Tu dois donc juste faire time() ou sleep(1)
    La premiere méthode est la plus propre car si tu as deux imports qui comportes des méthodes avec le même nom celle importée en dernier écrase l'autre. Il me semble par exemple que Tkinter et pylab comportent tous deux des méthodes Button. Donc si je fais
    from Tkinter import *
    from pyvar import *

    C'est le deuxième qui écrase le premier (Tkinter) et ils ne sont pas identique... Imagine le résultat.
    Avec import Tkinter cela s'écrit Tk.Button

    Il est aussi possible d'écrire import time as tm (tm pour l'exemple, tu mets ce que tu veux) et donc d'utiliser tm.time/tm.sleep ou de n'importer que certaines méthodes from time import sleep, time et là c'est sleep(1)

    Dans l'absolu import <tonimport> est donc plus propre.

    @+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 243
    Points : 103
    Points
    103
    Par défaut
    Merci encore PauseKawa,

    Tu ne dors jamais !!

    J'apprécie beaucoup tes réponses très professionnelles ..

    A bientot

    PS : tu as peut-être une idée sur les temps d'exécution en Python et en Fortran (voir le fil que j'ai initié ce matin) ...

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Re,

    Mon exemple d'import 'tordu' avec pylab (je n'étais pas sur le bon ordi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> from Tkinter import *
    >>> from pylab import *
    >>> root=Tk()
    >>> Button(root, text="texte").pack()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: __init__() got an unexpected keyword argument 'text'
    >>>
    @+

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 280
    Points : 149
    Points
    149
    Par défaut import avec les classes
    Merci pour cette question qui m'aide un peu.
    Moi-même j'essaye d'importer une classe dans un programme afin d'hériter de la classe importé dans une classe créée à partir de ce prog. Or quand j'utilise "import abcd" je ne peux pas utiliser cette classe en revanche avec "from abcd import maClasse" ça marche. Je ne comprends pas vraiment la difference avec ces deux instructions y-a-t-il un tuto à ce sujet??

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    il faut préfixer le nom de la classe par le nom du module.

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import abcd
    class MaClasseDerivee(abcd.ClasseDeBase):
        pass
    ou alors avec l'autre forme (qui est très très mal ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from abcd import *
    class MaClasseDerivee(MaClasseDeBase):
        pass
    c'est "très très" mal car cela nuit à la lisibilité du code, s'il y a plusieurs modules qui sont importés avec * on ne sait pas lequel fournit cette classe.

    ou encore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from abcd import MaClasseDeBase
    class MaClasseDerivee(MaClasseDeBase):
        pass

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 280
    Points : 149
    Points
    149
    Par défaut
    ou encore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from abcd import MaClasseDeBase
    class MaClasseDerivee(MaClasseDeBase):
        pass
    [/QUOTE]

    C'est ce que j'ai fait.
    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre %STR et %QUOTE
    Par fafabzh6 dans le forum Macro
    Réponses: 10
    Dernier message: 14/03/2011, 17h43
  2. Différence entre faire import paquetage.classe; et import paquetage.*;
    Par Chatbour dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 19/09/2008, 11h19
  3. Réponses: 4
    Dernier message: 07/07/2006, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo