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 :

importer 1 classe fille depuis 1 sous repertoire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    conducteur autocar
    Inscrit en
    Janvier 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : conducteur autocar
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2020
    Messages : 67
    Par défaut importer 1 classe fille depuis 1 sous repertoire
    Bonjour,

    je n'arrive pas importer une classe fille depuis un sous repertoire
    je vs donne la structure dossier/fichiers

    FP.py (comprend le mainloop() et l'instanciat° d'objets)
    classeA.py (la classe mere)
    __init__.py
    dossierA1

    Ds le dossier dossierA1, on trouve
    classeA1.py
    __init__.py

    le contenu des differents fichiers
    FP.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import tkinter as tk
    import classeA
    import A1.classeA1
    FP= tk.Tk()
    FP.geometry("1000x400")
    FP.minsize(500, 200)
    FP.maxsize(1100, 500)
    objA= classeA.A()
    print(objA.nom)
    objA1= A1.classeA1.A1()
    print(objA1.nom)
    FP.mainloop()
    le fichier classeA.py (tt bete)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import A1.classeA1
    class A():
        def __init__(self, nom="A"):
            self.nom= nom
    le fichier __init__.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ## nom_du_dossier.nom_du_fichier.nom_du_constructeur
    import A1.classeA1.A1
    Dc ces 3 fichiers st ds le meme dossier
    et dc j'ai en + le sous-dossier dossierA1 qui contient les fichiers classeA1.py et __init__.py
    le fichier classeA1.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class A1():
        def __init__(self, nom= "A1"):
            self.nom= nom
    le fichier __init__.py est vide

    Qd j'execute FP.py, j'arrive a instancier mes objets (j'ai leur nom qui s'affiche ds la console), il n'y a pas d'heritage.
    Maintenant, A1 devient classe fille de A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class A1(A):
        def __init__(self, nom= "A1"):
            self.nom= nom
    retour erreur:
    NameError: name 'A' is not defined

    Alors j'ai essayé beaucoup de choses mais je n'y arrive pas.
    L'un (ou l'une) d'entre vous aurait il la gentillesse de m'expliquer 1 bonne x pr tte ce'il faut faire.
    Ca fait 2 jours que je suis là-dessus etj'arrive pas a comprendre.

    En vous remerciant.
    grub

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 759
    Par défaut
    Salut,

    Le message "NameError: name 'A' is not defined" indique juste que la variable globale A (mais "globale" avec Python <=> portée du module) n'a pas été définie (avant de vouloir l'utiliser).

    Pour définir une variable, il faut lui assigner quelque chose (A =...).
    Et avec import se sera via from module import A.

    note: et la portée des variables n'a rien à voir avec les classes et l'héritage.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    conducteur autocar
    Inscrit en
    Janvier 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : conducteur autocar
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2020
    Messages : 67
    Par défaut
    re,

    merci de la reponse:

    j'ai modifié les fichiers tels quels:

    fichier FP.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import tkinter as tk
    from classeA import A
    from A1.classeA1 import A1
     
    FP= tk.Tk()
    FP.geometry("1000x400")
    FP.minsize(500, 200)
    FP.maxsize(1100, 500)
    objA= A()
    print(objA.nom)
    objA1= A1()
    print(objA1.nom)
    FP.mainloop()
    fichier classeA.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    from A1.classeA1 import A1
     
    class A():
        def __init__(self, nom="A"):
            self.nom= nom
    fichier __init__.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    from classeA import A
    from A1.classeA1 import A1
    Ds le dossier A1
    fichier classeA1.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class A1(A):
        def __init__(self, nom= "A1"):
            self.nom= nom
    fichier __init__.py tjs vide.

    Pour définir une variable, il faut lui assigner quelque chose (A =...).
    oui je suis d'accord ms ou? ds la declaration de classe A1?, Faut il que je cree un objet ds le fichier de la classe A?
    parce qu'entre les dossiers, fichiers, constructeurs, je m'y perds.

    En te remerciant

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 759
    Par défaut
    Citation Envoyé par grub_fr Voir le message
    oui je suis d'accord ms ou? ds la declaration de classe A1?, Faut il que je cree un objet ds le fichier de la classe A?
    parce qu'entre les dossiers, fichiers, constructeurs, je m'y perds.
    Il faut définir A dans le module qui l'utilise.
    Et si vous vous perdez: Python ne vous oblige pas à découper "finement" vos modules: définir A et A1 dans le même module sera plus simple. Vous n'êtes pas obligé de découper en module: tout dans le même script fonctionnera (sans avoir à faire d'import).
    Simplifiez, essayez de comprendre comment çà fonctionne avant de vous compliquer la vie.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/03/2019, 01h13
  2. Instancier une classe fille depuis le constructeur de la classe mère
    Par austin57 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 15/11/2017, 22h24
  3. Instanciation d'une classe fille depuis une classe mère
    Par khaled-benloucif dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2009, 23h59
  4. Accèder à une classe fille depuis la classe mère
    Par Phreak0x dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/10/2008, 10h14
  5. [FLASH MX2004] Classes dans sous-répertoires
    Par tomperso dans le forum Flash
    Réponses: 4
    Dernier message: 31/08/2006, 23h13

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