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().
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
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()
Avez vous une idée ? (Ou je me plante ?)
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()
Merci
Partager