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 :

appel de classe [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Points : 23
    Points
    23
    Par défaut appel de classe
    bonjour

    je m'initie au python depuis peu. ce sera pour gérer une raspberry.


    j m'essaye au classe.
    en un même fichier, ça fonctionne, j'ai à peu près compris

    je fais une class qui ne fait rien sinon afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class testclass
        def __init__(self):
             print("la classe fonctionne")

    j'appelle en interne, ça fonctionne bien
    je n'ai que cette ligne et il m'affiche bien "la classe fonctionne"


    je met la classe dans un fichier testclass.py (j'ai vu qu'en général les programmeur mettait le même nom fichier et classe) et dans le même répertoire pour ne pas avoir à gérer l'emplacement, enfin je l'espère.
    en rajoutant dans le programme principal


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import testclass
    test = testclass
    et là je me fais jeter violemment
    erreur sur la ligne import
    erreur sur répertoire python, comme s'il ne trouvait pas la classe, : module = self_original_import(*args, **kw),
    erreur sur la ligne def__init__(self): du fichier classe, comme quoi il a trouvé le fichier, mais pourquoi une erreur de syntaxe, alors que j'ai conservé la même syntaxe


    je me suis souvenu avoir lu quelque part d'utiliser from mais je ne sais plus pourquoi.
    je suppose from du fichier, import class.


    je teste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from testclass import testclass
    test = testclass()

    et je me fais jeter de la même manière avec les mêmes erreurs


    donc là je cale

    merci de votre aide

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2012
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 321
    Points : 604
    Points
    604
    Par défaut
    Bonjour,

    Dans votre fichier principal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import testclass
     
    test=testclass.testclass()
    Dans votre fichier testclass.py

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class testclass:
        def __init__(self):
            print("la classe fonctionne")
    Exécutez votre fichier principal et si votre fichier testclass.py est dans le même répertoire cela fonctionnera

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 298
    Points : 6 778
    Points
    6 778
    Par défaut
    Citation Envoyé par toppsir Voir le message
    bonjour

    je m'initie au python depuis peu. ce sera pour gérer une raspberry.


    j m'essaye au classe.
    en un même fichier, ça fonctionne, j'ai à peu près compris

    je fais une class qui ne fait rien sinon afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class testclass
        def __init__(self):
             print("la classe fonctionne")
    Les noms de classe sont capitalisés. Testclass
    Il faut un double-point final.

    erreur sur répertoire python, comme s'il ne trouvait pas la classe, : module = self_original_import(*args, **kw)
    erreur sur la ligne def__init__(self): du fichier classe, comme quoi il a trouvé le fichier, mais pourquoi une erreur de syntaxe, alors que j'ai conservé la même syntaxe
    Il faut copier-coller l'erreur exacte, ici on voit qu'il manque un espace après def ....

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Points : 23
    Points
    23
    Par défaut
    merci, ça fonctionne, je vais pouvoir essayer dans un autre répertoire

    les 2 points, faute de frappe dans le post, dans l’ersatz de programme ils y étaient
    en attendant pour cette question je vais mettre résolu
    merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Points : 23
    Points
    23
    Par défaut
    j'ai mis l'appel dans un try / exept

    et bien sûr ... interception d'une erreur

    en relisant vos réponses vous mettez directement imput testclass sans le from
    j'avais laissé from testclass imput testclass

    en supprimant le from ça fonctionne
    alors je n'ai pas bien compris à quoi servait le from et dans quel cas il faut le mettre

  6. #6
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Citation Envoyé par toppsir Voir le message
    jen supprimant le from ça fonctionne
    alors je n'ai pas bien compris à quoi servait le from et dans quel cas il faut le mettre
    Qu'on fasse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import testclass
    obj = testclass.Testclass()
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from testclass import Testclass
    obj = Testclass()
    Le résultat est le même, on utilise le from module import truc dans le cas où on a besoin d'utiliser que quelques éléments du module, mais cela peut également servir dans le cas d'import de modules d'un package.
    Le temps ronge l'amour comme l'acide.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 631
    Points : 30 865
    Points
    30 865
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par toppsir Voir le message
    en relisant vos réponses vous mettez directement imput testclass sans le from
    j'avais laissé from testclass imput testclass

    en supprimant le from ça fonctionne
    alors je n'ai pas bien compris à quoi servait le from et dans quel cas il faut le mettre
    Dans le cas import testclass ça crée un espace de nommage "testclass" spécifique à ton module. Si tu veux donc utiliser l'objet "TestClass" qui s'y trouve, il faudra écrire a=testclass.TestClass(...).
    Dans le cas from testclass import Testclass (ou plus prosaïquement from testclass import *) ça importe les objets de "testclass" dans l'espace de nommage principal de ton programme. Donc là tu pourras te contenter d'écrire a=TestClass(...).

    La seconde solution semble alléchante mais que se passera-t-il si tu crées 2 objets de même nom dans 2 sources différents et que tu veux les utiliser tous deux en même temps ? Ou si tu veux utiliser 2 librairies faites par Pierre et Paul qui ont toutes deux des objets de même nom (Pierre ne se préoccupe pas forcément ce que Paul a écrit quand il programme sa lib)...

    Ceci dit ce n'est pas interdit de l'utiliser dans certains cas bien caractérisés. Par exemple les objets de la librairie "Qt" commencent tous par "Q..." (QMainWindow, QWidget, QLineEdit, ...). Ceux de la librairie QGis commentent tous par "Qgs" (QgsMapCanvas, QgsPoint, QgsVertexMapper, ...)
    Donc quand on utilise ces librairies un peu exceptionnelles, on peut admettre de les importer de la seconde façon car il y a peu de risques de collision. Mais pour des librairies moins caractérisées car plus générales (os, sys, datetime, ...), il est plus conseillé d'utiliser la première.

    Accessoirement tu peux utiliser la première forme d'import tout en te facilitant ensuite la vie. Si par exemple ça te gonfle de devoir mettre "testclass." devant tous tes objets, tu peux utiliser l'aliasing => import testclass as tc. Ensuite, tu accèderas à tes objets en y mettant juste le préfixe "tc" => a=tc.TestClass(...).

    Citation Envoyé par bistouille Voir le message
    Le résultat est le même, on utilise le from module import truc dans le cas où on a besoin d'utiliser que quelques éléments du module, mais cela peut également servir dans le cas d'import de modules d'un package.
    Incompréhensible, comme d'habitude. Le PO demande une explication et tu lui réponds par un exemple. Depuis quand un exemple remplace une explication ? Ca l'illustre, oui, mais ça ne la remplace pas.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Points : 23
    Points
    23
    Par défaut
    je vous remercie de toutes ces explications.
    grâce à vous j'ai réussi à faire des appels de classes dans le même fichier et dans des fichiers différents, mais même répertoire pour le moment, ça fonctionne.

    je vais tester maintenant dans des répertoires différents

    je vous remercie pour cette 1ere étape sur les classes.

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

Discussions similaires

  1. [Package] Appel à une classe
    Par GLDavid dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2006, 13h49
  2. Appeler une classe CSS avec Javascript
    Par p0Kep0K dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/02/2006, 15h50
  3. Appeler 2 classes en même temps?
    Par Death83 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/02/2006, 00h38
  4. Réponses: 14
    Dernier message: 15/12/2005, 19h46
  5. [Exception]Connaitre la pile d'appel de classes/méthodes
    Par salome dans le forum Général Java
    Réponses: 2
    Dernier message: 19/03/2005, 21h21

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