>>> class A(object): pass
>>> def func(cls): pass
>>> A.func = func
>>> A.func
<unbound method A.func>
Comment cette mission crée-t-elle une méthode ? Il semble peu intuitif que l'affectation fasse ce qui suit pour les classes :
- Transformer les fonctions en méthodes d'instance non liées
- Tourner les fonctions enveloppées dans
classmethod()
dans les méthodes de classe (en fait, c'est assez intuitif) - Tourner les fonctions enveloppées dans
staticmethod()
en fonctions
Il semble que pour le premier, il devrait y avoir une instancemethod()
et pour la dernière, il ne devrait pas y avoir de fonction wrapper du tout. Je comprends que ces fonctions sont destinées à être utilisées dans un class
mais pourquoi devraient-ils s'appliquer en dehors de ce bloc ?
Mais surtout, comment fonctionne exactement l'affectation de la fonction à une classe ? Quelle est la magie qui permet de résoudre ces trois problèmes ?
Encore plus confus avec ça :
>>> A.func
<unbound method A.func>
>>> A.__dict__['func']
<function func at 0x...>
Mais je pense que c'est quelque chose à voir avec les descripteurs, quand récupération de attributs. Je ne pense pas que cela ait beaucoup à voir avec les paramètre d'attributs ici.