Bonjour,

Existe t'il une astuce pour exécuter du code après un return ?

Je m'explique.
Dans le cadre d'une instantiation je cherche à lire le namespace globals au sein même de l'instance. Hors c'est Python qui ajoute mon instance dans ce namespace via le key=instance.

Dans le cadre des deux codes suivants l'__init__ est bien exécuté mais tant que Python n'as pas le retour d'__init__, soit l'instance, il n'y as pas d'entrée dans le globals().

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
class metavarclass(type):
    def __new__(cls, name, bases, dct):
        print "Allocation mémoire pour la class", name
        return type.__new__(cls, name, bases, dct)
 
    def __init__(self, name, bases, dct):
        super(metavarclass, self).__init__(name, bases, dct)
        print "Init de la class", self
 
class varclass(object):
 
    __metaclass__ = metavarclass
 
    def __init__(self):
        self._name = None
 
    def getmyname(self):
        for keys in (keys for keys, values in globals().items() if values == self):
            print 'valeur trouvée', keys
            self._name=keys
 
a=varclass()
print "Après l'instanciation", a.getmyname()
Ou

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
class varname(object):
    def getname(function):
        def mon_init(*args, **kwargs):
            instance = args[0]
            function(*args, **kwargs)
            print "Après l'init et dans getname:", instance.getmyname()
        return mon_init
 
    @getname
    def __init__(self):
        print 'Init de varname'
        self._name=None
 
    def getmyname(self):
        for keys in (keys for keys, values in globals().items() if values == self):
            print 'valeur trouvée:', keys
            self._name=keys
 
a=varname()
print "Après l'instanciation.", a.getmyname()
Avez vous une idée ? (Ou je me plante ?)

Merci