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 :

utilisation de classes


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut utilisation de classes
    Bonjour,
    J'ai créé un fichier Mes_Classes.py, dans lequel j'ai mis mes Classes

    quand je veux les utiliser dans un script
    je peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from Mes_Classes import Acces_Base, Personnage
    Et après je peux les utiliser comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Acces_Base.Add_Perso(perso)
    perso = Personnage()
    Si je fais l'import comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import Mes_Classes as MC
    je dois les utiliser comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    perso = MC.Personnage()
    MC.Acces_Base.Add_Perso(perso)
    Du coup c'est vachement plus long à écrire quand je veux utiliser une fonction qui est dans ma classe.
    Il n'y aurait pas un moyen de définir l'import, pour que je puisse utiliser la fonction Add_Perso directement sans lui dire que Add_Perso est une fonction de la classe Acces_Base, ou en tout cas que je le lui dise une fois pour toute au début et qu'il se débrouille avec pour la suite?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 687
    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 687
    Par défaut
    Citation Envoyé par figuedi Voir le message
    Du coup c'est vachement plus long à écrire quand je veux utiliser une fonction qui est dans ma classe.
    Il n'y aurait pas un moyen de définir l'import, pour que je puisse utiliser la fonction Add_Perso directement sans lui dire que Add_Perso est une fonction de la classe Acces_Base, ou en tout cas que je le lui dise une fois pour toute au début et qu'il se débrouille avec pour la suite?
    On crée des "class" parce qu'on va fabriquer des objets similaires qui s'appellent "instances". Et ils seront similaires parce qu'ils auront les mêmes attributs/méthodes.
    Pour fabriquer une collections de fonctions, un module suffit (pas besoin de créer une "class" dans le "module" puisqu'il n'y a pas d'instances).
    Et avec cette histoire d'instances, on écrira plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ab = MC.Acces_Base()
    perso = MC.Personnage()
    ab.Add_Perso(perso)
    ce qui est beaucoup plus court.

    Il y a d'autres techniques mais il va falloir prendre le temps d'apprendre les bases avant pour que ce soit intéressant.

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

  3. #3
    Membre confirmé
    Homme Profil pro
    support technique
    Inscrit en
    Mars 2020
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : support technique

    Informations forums :
    Inscription : Mars 2020
    Messages : 79
    Par défaut
    oui pour les classes
    Dans la classe mère Personnage, il y a les enfants, guerriers, magicien, Clerc, ....
    J'avais dans l'idée de faire la classe Acces_Base
    ou il se connecte à la BDD et ouvre le curseur et le connecteur
    puis des fonctions qui comme ça ne m'oblige pas à appeler la connexion à la base ni l'ouverture du connecteur et du curseur lors de l'appel de chaque fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class Acces_Base():
        global cursor
        global cnx
        from mysql.connector import (connection)
        cnx = connection.MySQLConnection(user='root', password='',
                                         host='127.0.0.1',
                                         database='mysql')
        cursor = cnx.cursor()
        def Lire_Perso(nom):
            sql_query = pd.read_sql('SELECT * FROM jeu WHERE Nom="%s"' % nom, cnx)
            print(sql_query)
     
        def Delete_Perso(nom):
            SQL_Querry = ("DELETE FROM jeu where Nom = %s")
            cursor.execute(SQL_Querry, (nom,))
            cnx.commit()
    L'inconvénient majeur dont je viens de me rendre compte à l'instant c'est que je ne ferme pas le connecteur ni le curseur, ça n'a pas l'air de le déranger outre mesure mais bon ...

    Si je n'utilise pas la classe je dois rajouter l'appel à ma fonction Acces_Base en effet l'écriture sera plus rapide et surement plus correcte vis à vis des bonnes pratiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        def Lire_Perso(nom):
            Acces_Base()
            sql_query = pd.read_sql('SELECT * FROM jeu WHERE Nom="%s"' % nom, cnx)
            print(sql_query)
            cursor.close()
            cnx.close()
    Pour une fois j'ai peut etre compris du premier coup tes explications

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 687
    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 687
    Par défaut
    Citation Envoyé par figuedi Voir le message
    ou il se connecte à la BDD et ouvre le curseur et le connecteur
    puis des fonctions qui comme ça ne m'oblige pas à appeler la connexion à la base ni l'ouverture du connecteur et du curseur lors de l'appel de chaque fonction
    Trouver "global" dans une "class" est que vous n'avez pas assez potassé les "class" avant de les utiliser.
    Rien n'empêche de créer un objet connection à la BDD qui initialise ce qu'on veut pour que les méthodes en profitent.

    Mais relisez votre fonction Lire_Perso: elle se contente d'afficher (via print) sans rien retourner à l'appelant. Aucun intérêt!


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

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 811
    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 811
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par figuedi Voir le message
    Dans la classe mère Personnage, il y a les enfants, guerriers, magicien, Clerc, ....
    Pourquoi pas une classe "personnage" qui contient le type (guerrier, magicien, clerc) ? Parce que dans les jeux de rôle, guerrier et clerc c'est la même chose (le premier frappe fort mais a un QI d'huitre tandis que le second a mémorisé les 40 grimoires de la magie mais peine à soulever son propre corps)...

    Citation Envoyé par figuedi Voir le message
    J'avais dans l'idée de faire la classe Acces_Base
    ou il se connecte à la BDD et ouvre le curseur et le connecteur
    puis des fonctions qui comme ça ne m'oblige pas à appeler la connexion à la base ni l'ouverture du connecteur et du curseur lors de l'appel de chaque fonction
    Oui c'est l'idée de base de MVC. Mais pourquoi en rester juste au curseur? Tu crées une fonction style "sauvegarde_bdd" qui se charge de se connecter, ouvrir le curseur, faire la sauvegarde puis fermer le curseur et fermer la bdd.

    Citation Envoyé par figuedi Voir le message
    L'inconvénient majeur dont je viens de me rendre compte à l'instant c'est que je ne ferme pas le connecteur ni le curseur, ça n'a pas l'air de le déranger outre mesure mais bon ...
    Ouaip. Tu peux aussi quitter ta maison sans fermer la porte, ça ne va pas te déranger outre mesure jusqu'au jour où...

    On ferme ses ressources ouvertes, c'est une des bases de la programmation "propre" et ça ne se discute pas. Ceci dit, créer une classe pour l'accès à la bdd je comprends, créer une classe pour le curseur je comprends beaucoup moins. C'est pas la mort de placer le curseur dans les fonctions qui en ont besoin.
    Donc au début du programme tu ouvres la bdd, à la fin du programme tu la fermes et les curseurs tu les crées quand tu en as besoin. Et là tout est ok.
    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]

Discussions similaires

  1. [Taglibs] Utiliser les classes css ?
    Par PeteMitchell dans le forum Struts 1
    Réponses: 4
    Dernier message: 05/05/2007, 01h31
  2. [EJB][JONAS] EJB utilisant une classe "externe"
    Par Gregory3000 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 13/12/2004, 19h57
  3. utilisation de CLASS dans un formulaire
    Par lepierre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 18/11/2004, 16h38
  4. utiliser des classes dont on n'a pas le source
    Par kocin dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/08/2004, 16h05
  5. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21

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