Python: Rappels, Délégués, ... ? Ce qui est commun?
Veux juste savoir quelle est la façon la plus commune pour réagir aux événements en python. Il y a plusieurs façons dans d'autres langues comme des fonctions de rappel, les délégués, auditeur,-les structures et ainsi de suite.
Est-il une voie commune? Qui langue par défaut des concepts ou des modules supplémentaires sont là et qui peut vous recommander?
Vous devez vous connecter pour publier un commentaire.
Personnellement, je ne vois pas une différence entre les rappels, les auditeurs, et les délégués.
La modèle observateur (un.k.un des auditeurs, une.k.un "plusieurs rappels") est facile à mettre en œuvre - il suffit de tenir une liste des observateurs, et ajouter ou supprimer des callables d'elle. Ces callables peuvent être les fonctions, les méthodes liées, ou des classes avec
__call__
méthode magique. Tout ce que vous avez à faire est de définir l'interface que vous attendez de ces - par exemple, ils reçoivent tous les paramètres.foo.add_bar_observer(callable)
?__call__
. Vous pouvez en lire plus à ce sujet (et d'autres noms de méthode) dans le docs.python.org/reference/datamodel.htmlSomeCallable()
devrait lireSomeCallable
(je ne suis pas assez sûr de corriger moi-même, je vais supprimer le commentaire si nécessaire)SomeCallable
qui sont remboursables. Je vais changer le nom de la classe 🙂object
est une ancienne python2 caprice, ce qui nous assure d'obtenir le nouveau style de classes à la place de la vieille-classes de style. Inutiles dans python3. notify_bar ne savent pas ou de soins qui appelable il appelle. Cela ajouté à la liste plus tôt, et maintenant, c'est de les appeler. Ils sont opaques autant qu'il est concerné.Je ne peux pas parler pour les approches communes, mais cette page (copie réelle n'est pas disponible) est une implémentation du pattern observer que j'aime.
Voici les Archives d'Internet lien:
http://web.archive.org/web/20060612061259/http://www.suttoncourtenay.org.uk/duncan/accu/pythonpatterns.html
Tout dépend du niveau de complexité de votre application. Pour de simples événements, rappels seront probablement faire. Pour des modèles plus complexes et découplé niveaux, vous devez utiliser un certain type de publication-souscription de mise en œuvre, tels que PyDispatcher ou wxPython est pubsub.
Voir aussi cette discussion.
La plupart des bibliothèques Python, j'ai utilisé de mettre en œuvre un modèle de rappel pour leurs notifications d'événements, qui, je pense, convient à la langue assez bien. Pygtk fait en dérivant tous les objets de GObject, qui met en œuvre rappel de base de traitement du signal. (Même si c'est une caractéristique du sous-jacent C GTK mise en œuvre, et non pas quelque chose inspiré par la langue.) Cependant, Pygtkmvc fait un travail intéressant de mettre en place un modèle observateur (et MVC) sur le dessus de Pygtk. Il utilise une très fleuri métaclasse en fonction de la mise en œuvre, mais j'ai trouvé que cela fonctionne assez bien pour la plupart des cas. Le code est assez simple à suivre, ainsi, si vous êtes intéressé à voir une façon dont cela a été fait.
Personnellement, je n'ai vu que des rappels utilisé. Cependant, je n'ai pas vu autant événement piloté par le code python donc YMMV.
J'ai vu des auditeurs et des rappels de service utilisé. Mais autant que je sache, il n'existe pas de façon Python. Ils devraient également être possible si l'application en question est adapté.
La
matplotlib.cbook
module contient une classeCallbackRegistry
que vous pourriez vouloir jeter un oeil à. À partir de la la documentation:Vous ne voulez probablement pas une dépendance à la matplotlib paquet. Je vous suggère de simplement copier-coller le classe dans votre propre module de la le code source.
Je suis à la recherche d'une mise en œuvre d'enregistrer et de gérer les événements en Python. Ma seule expérience est avec Gobject, mais ont seulement utilisé avec PyGtk. Il est flexible, mais peut-être trop compliqué pour certains utilisateurs. Je suis venu à travers de quelques autres candidats intéressants, mais on ne sait pas exactement comment ils se comparent les uns des autres.