- KFC,
Bonjour,
J'utilise python 2.7 et mon but est de reifier automatiquement les attributs d'une classe (c'est a dire encapsuler la valeur de cet attribut dans une classe minimale creee pour l'occasion).
Malheureusement, cela ne fonctionne pas et j'ai du mal a voir pourquoi, n'etant pas forcement familie avec les subtilites des metaclasses:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | def myListPrint(self): # Juste de quoi afficher les instances return 'value: {0}\nfilter: {1}'.format(self.value, self.filter) class MetaClassify(type): # Metaclasse dont le but est remplacer les attributs de classe par un objet classe def __init__(cls, name, bases, nmspc): for e in [a for a in nmspc if not(a[0].startswith('_'))]: nmspc[e] = type(e, (object,), {'value': e, 'filter': None, '__repr__':myListPrint}) print nmspc # Ici on voit bien que l'attribut a ete modifie super(MetaClassify, cls).__init__(name, bases, nmspc) class MyList: # Un exemple de classe avec des attributs a modifier __metaclass__ = MetaClassify MyParam = 'Test' if __name__ == "__main__": print type(MyList.MyParam), MyList.MyParam # Toujours une chaine de characteres au lieu d'une classe. |
Merci de votre aide.
+0
-0