Même en ayant l'habitude des langages (pré-)compilés où ce genre de manip' est impossible, ajouter dynamiquement des méthodes à une classe est déjà douteux, mais les ajouter à une instance précise est encore plus tordu. Pourtant, l'exercice aurait pu être intéressant en soi...
Un exercice pas bien compliqué puisqu'il suffit d'essayer. C'est sûr que c'est douteux mais il y a plein de scénario ou ce genre de possibilité est utile. Le duck-typing en profite énormément, si une bibliothèque nécessite un objet capable de d'aboyer mais que je suis sûr d'avoir besoin et qu'il est pertinent de l'appliquer à mes canards, rien de plus simple que de faire aboyer mes canards.
Ce n'est pas quelque chose qu'on souhaite croiser en production mais tout le monde n'a pas des problèmes d'ingénierie logicielle à résoudre.
>>> class C():
... pass
...
>>> i1=C()
>>> i2=C()
>>> def f():
... print("ok")
...
>>> i1.f = f
>>> i1.f()
ok
>>> i2.f()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: C instance has no attribute 'f'
[^] # Re: Prendre le problème à l'envers
Posté par copapa . En réponse au message Ajouter des méthodes à une instance de classe, après sa création. Évalué à 3.
Un exercice pas bien compliqué puisqu'il suffit d'essayer. C'est sûr que c'est douteux mais il y a plein de scénario ou ce genre de possibilité est utile. Le duck-typing en profite énormément, si une bibliothèque nécessite un objet capable de d'aboyer mais que je suis sûr d'avoir besoin et qu'il est pertinent de l'appliquer à mes canards, rien de plus simple que de faire aboyer mes canards.
Ce n'est pas quelque chose qu'on souhaite croiser en production mais tout le monde n'a pas des problèmes d'ingénierie logicielle à résoudre.