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 :

Retrouver les instances d'une classe donnée


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inactif
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Retrouver les instances d'une classe donnée
    Bonsoir à tous

    Est-il possible de retrouver les objets d'une classe donnée ?

    Par exemple, j'ai défini une classe "Dictionnaire" et je cherche, dans une procédure, à retrouver les objets de cette classe sans avoir préalablement constitué la liste des dictionnaires au fur et à mesure de leur création.

    Arbiel

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Comme pour n'importe quelle autre instance d'objet: isinstance(dico, Dictionnaire) --> True or False

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Arbiel Voir le message
    Est-il possible de retrouver les objets d'une classe donnée ?
    Si les instances n'ont pas été explicitement stockés dans une liste, Python ne le fait pas pour vous.
    note: vous pouvez toujours trier la liste de tous les objets "actifs" (le module gc devrait pouvoir la retourner).

    A ma connaissance, Python garde juste la mémoire des sous-classes d'une classe.

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

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inactif
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Si les instances n'ont pas été explicitement stockés dans une liste, Python ne le fait pas pour vous.
    note: vous pouvez toujours trier la liste de tous les objets "actifs" (le module gc devrait pouvoir la retourner).

    A ma connaissance, Python garde juste la mémoire des sous-classes d'une classe.

    - W
    Bonsoir

    Merci pour cette information. Je vais aller lire la spécification des procédures de ce module.

  5. #5
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 474
    Points : 6 119
    Points
    6 119
    Par défaut
    Bonsoir,
    Citation Envoyé par Arbiel Voir le message
    Par exemple, j'ai défini une classe "Dictionnaire" et je cherche, dans une procédure, à retrouver les objets de cette classe sans avoir préalablement constitué la liste des dictionnaires au fur et à mesure de leur création.
    Python est un langage dont la gestion de la mémoire passe par un ramasse-miettes (garbage collector) qui finit par supprimer les objets qui ne sont plus accessibles. C'est normal, car un programme qui ne libèrerait pas de mémoire consommerait de plus en plus de mémoire jusqu'à crasher. Quand on crée un objet qu'on veut récupérer plus tard, il faut le mettre dans un endroit accessible.

    Voici une solution pour pouvoir, en une opération, créer un objet tout en le rangeant quelque part :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    class Dictionary:
        pass
     
    class DictionaryRepo:
     
        def __init__(self):
            self.__dictionaries = []
     
        def create_dictionary(self):
            new_element = Dictionary()
            self.__dictionaries.append(new_element)
            return new_element
     
        def get_all(self):
            return self.__dictionaries
     
    def demo():
        repo = DictionaryRepo()
        d1 = repo.create_dictionary()  # create and store in one operation
        d2 = repo.create_dictionary()  # create and store in one operation
        dlist = repo.get_all()
        assert dlist == [d1, d2]
     
    demo()
    À part ça, attention à la conception. Pouvoir récupérer tous les objets d'une classe depuis n'importe quel endroit du programme (comme le permet le langage Ruby avec ObjectSpace.each_object) empêcherait de pouvoir bâtir de gros programmes maintenables si on ne se restreignait pas à n'utiliser une telle fonctionnalité que dans des cas très spécifiques comme du débogage.

    Avoir toute donnée accessible dans tout le programme, ce n'est pas gênant pour un petit script de 100 lignes. Mais, plus un programme grossit, plus on a besoin, pour qu'il reste compréhensible, de le découper en morceaux dont on a une vision claire sur les entrées et les sorties.

    D'ailleurs, c'est pour ça que, dans le code ci-dessus, ma variable repo n'est pas une variable globale.

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 830
    Points : 7 132
    Points
    7 132
    Par défaut
    Bonjour,

    Sans compter le fait que si on souhaite modifier un élément, il faudra faire une recherche dans le Repo afin de prendre en compte cette modification dans la liste.

    Je vois pas l'intérêt honnêtement, mais imaginons qu'on souhaite un stockage, alors on pourrait considérer une base de données pour cela.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 474
    Points : 6 119
    Points
    6 119
    Par défaut
    En tout cas, il faut plus d'informations sur le code de départ pour qu'on puisse estimer quelle serait la conception la plus adaptée. À quoi sert le code qui construit les dictionnaires et à quoi sert le code qui les lit ?

    Là, on répond à la question du fil (retrouver les instances d'une classe donnée), mais je ne sais pas si on répond bien au besoin (écrire du bon code).

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Inactif
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Inactif

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Bonsoir à tous

    J'ai été bien lent à reprendre le fil de cette discussion.

    J'ai finalement changé ma conception : j'enregistre la référence des objets que je veux retrouver dans un dictionnaire, au sens python du terme, dont la clé est le nom de l'objet en question. Ce dictionnaire, ainsi que les paramètres de mon application extraits d'un fichier de configuration, sont enregistrés dans un module que j'ai créé à cet effet et que j'importe en tant que de besoin.

    Les dictionnaires évoqués au début de la présente discussion sont, par contre, des objets python qui décrivent des dictionnaires, au sens usuel du terme, tels que le dictionnaire grec - français et le dictionnaire français - grec : nombre de pages, localisation de ces pages, …

    Je vais donc clore cette discussion, en vous remerciant tous d'y avoir participe.

    Arbiel

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

Discussions similaires

  1. Connaitre les instances d'une classe donnée
    Par pip1000 dans le forum Langage
    Réponses: 1
    Dernier message: 23/04/2009, 16h04
  2. Utilisation de toutes les instances d'une classe dans un while
    Par canaboss dans le forum Débuter avec Java
    Réponses: 12
    Dernier message: 28/04/2008, 15h28
  3. comment trier les instances d'une classe selon un attribut choisi
    Par rddev dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 29/05/2007, 00h01
  4. Accéder à toutes les instances d'une classe
    Par MrGecko dans le forum Delphi
    Réponses: 15
    Dernier message: 14/05/2007, 00h50
  5. Connaitre toutes les instances d'une classe
    Par miniseb dans le forum Langage
    Réponses: 14
    Dernier message: 09/01/2006, 17h35

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