Comment puis-je parcourir toutes les instances d'une classe Python ?

Patricia Arquette
Libérer: 2024-10-30 04:05:28
original
1023 Les gens l'ont consulté

How Can I Iterate Over All Instances of a Python Class?

Itération sur les instances d'une classe Python

Lorsque vous travaillez avec une programmation orientée objet en Python, il peut y avoir des situations où vous devez accéder et imprimer chaque instance d'un classe particulière. Nous examinons ici deux méthodes pour accomplir cette tâche :

Garbage Collector

Cette approche utilise le garbage collector Python :

import gc
for obj in gc.get_objects():
    if isinstance(obj, some_class):
        print(obj)
Copier après la connexion

Cette méthode analyse tous les objets en mémoire, mais son inconvénient est sa lenteur d'exécution avec un grand nombre d'objets. De plus, cela peut ne pas être réalisable pour les types d'objets indépendants de votre volonté.

Mixin et Weakrefs

Une méthode alternative exploite une classe mixin et des références faibles :

from collections import defaultdict
import weakref

class KeepRefs(object):
    __refs__ = defaultdict(list)
    def __init__(self):
        self.__refs__[self.__class__].append(weakref.ref(self))

    @classmethod
    def get_instances(cls):
        for inst_ref in cls.__refs__[cls]:
            inst = inst_ref()
            if inst is not None:
                yield inst

class X(KeepRefs):
    def __init__(self, name):
        super(X, self).__init__()
        self.name = name

x = X("x")
y = X("y")
for r in X.get_instances():
    print(r.name)
del y
for r in X.get_instances():
    print(r.name)
Copier après la connexion

Ici , chaque instance est enregistrée comme référence faible dans une liste. Bien que cette approche soit plus efficace, elle nécessite l'utilisation d'une classe mixin et une initialisation correcte.

Conclusion

Le choix de la méthode pour imprimer toutes les instances d'une classe dépend des circonstances spécifiques, en tenant compte de facteurs tels que le nombre d'objets, le contrôle sur les types d'objets et les exigences de performances. Les deux méthodes présentées ici fournissent des solutions réalisables pour cette tâche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!