• STATISTIQUES
  • Il y a eu un total de 0 membres et 29937 visiteurs sur le site dans les dernières 24h pour un total de 29 937 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Microcontest
    Cryptographie: 7, Mathématiques: 8, Image Son Vidéo: 5, Intelligence artificielle: 3, Réseau: 2, Divers: 7, Phy...
    Challenges
    [FR] Root-Me
    Notre équipe se base sur un constat : à l'heure actuelle ou l'information tend à devenir...
    Hacking
    [EN] Defcon
    Lancé en 1992 par Dark Tangent, DEFCON est la plus ancienne et la plus grande conférence underground de...
    Hacking
    [FR] µContest
    µContest est un site de challenges de programmation, c'est à dire qu'il propose des épreu...
    Hacking
    [EN] Hack This Site
    Hack This Site est considéré comme un réel terrain d'entraînement légal pour le...
    Hacking
    [EN] osix
    Site de challenge qui utilise un système de level on chaque épreuve doit être réussie avant d'accédÃ...
    Challenges
    [EN] xda-developers
    Très bon site pour les gros bidouilleurs de smartphone de windows à androïd et de Apple jusqu'...
    Phreaking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!

    €



Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[python] Un décorateur pour inventorier les objets
04-12-2014, 17h35 (Modification du message : 04-12-2014, 17h46 par b0fh.)
Message : #1
b0fh Hors ligne
Membre actif
*



Messages : 210
Sujets : 17
Points: 309
Inscription : Jul 2012
[python] Un décorateur pour inventorier les objets
Hello,

Il y a quelques jours, j'ai vu passer sur IRC une question: En python, comment itérer sur tous les objets d'une classe ?

La manière recommandée est de gérer son propre pool d'objets, parce qu'on peut difficilement prédire comment le garbage collector
va se comporter, et à quel moment un objet disparaît. Néanmoins, j'ai trouvé intéressant d'écrire la petite lib suivante:

Code PYTHON :
from weakref import WeakSet

def clique(klass):
    klass.all = WeakSet()
   
    if klass.__new__ is object.__new__:
        old = klass.__init__
        def new(self,*a,**kw):
            klass.all.add(self)
            old(self,*a,**kw)
        klass.__init__ = new
       
    else:
        old = klass.__new__
        def new(*a, **kw):
            obj = old(*a, **kw)
            klass.all.add(obj)
            return obj    
        klass.__new__ = new
       
    return klass


Cette lib définit un décorateur qui ajoute un membre statique `all` à chaque classe décorée. Il marche avec les dérivés d'objets immutables (comme les strings), et avec l'héritage multiple. Il s'utilise comme ceci:

Code :
>>> from clique import *
>>>
>>> @clique
... class Foo:
...   pass
...  
>>> a = Foo()
>>> b = Foo()
>>>
>>> list(Foo.all)
[<__main__.Foo object at 0x7ffc98477da0>, <__main__.Foo object at 0x7ffc98477c50>]

Essayons d'effacer la référence à un des deux objets:

Code :
>>> a = None
>>> list(Foo.all)
[<__main__.Foo object at 0x7ffc98477da0>, <__main__.Foo object at 0x7ffc98477c50>]

Ca n'a pas marché parce que le garbage collector n'a pas tourné. On peut le forcer manuellement:

Code :
>>> import gc
>>> gc.collect()
0
>>> list(Foo.all)
[<__main__.Foo object at 0x7ffc98477da0>]

La ça marche !
+1 (4) -1 (0) Répondre


Messages dans ce sujet
[python] Un décorateur pour inventorier les objets - par b0fh - 04-12-2014, 17h35

Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [Python]Situer mon niveau. InforMods 19 1,045 10-11-2016, 00h03
Dernier message: ZeR0-@bSoLu
  [PYTHON] un bot IRC basique darcosion 1 153 13-06-2016, 20h40
Dernier message: Yttrium
  [python] ANBU ::: TCP Session Hunter St0rn 2 241 25-02-2016, 18h45
Dernier message: otherflow
  [Python] Une autre façon de gérer les Virtualenv et Packages thxer 2 137 18-01-2016, 12h06
Dernier message: thxer
  [Python] rot script ark 9 480 08-03-2015, 00h37
Dernier message: ark
  [Python] Todo Manager ark 5 371 03-03-2015, 10h55
Dernier message: ark
  [python] UPnP Scanner St0rn 2 197 29-10-2014, 14h50
Dernier message: St0rn
  [python] Buffer Overflow : EBP et EIP St0rn 0 132 25-10-2014, 12h58
Dernier message: St0rn
  [Python] QuickHex thxer 9 461 15-08-2014, 20h26
Dernier message: sakiir
  Python : QuickBIn octarin 1 148 13-08-2014, 19h05
Dernier message: thxer

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut