Python Callback - Nutzerfunktion aufrufen
lima-city → Forum → Programmiersprachen → Python
anruf
ansatz
aufruf
ausgehende anrufe
beispiel
code
definierte funktion
eingehenden anruf
funktion
monitor
nachricht
nutzer
problem
reine funktionen
spielende musik
unterfunktion
url
verbindung
welt
zeiger
-
Hallo zusammen,
ich habe eine kleine Python Klasse geschrieben, die es ermöglicht mithilfe des FritzBox! Anrufmonitors einkommende und ausgehende Anrufe anzuzeigen. Das ganze geschieht über eine TCP Verbindung und kann z.B. benutzt werden, um bei einer Heimautomatisierungslösung bei einem eingehenden Anruf spielende Musik automatisch anzuhalten.
Der Code ist hier zu finden: https://github.com/HcDevel/py-fritz-monitor/blob/master/call-monitor.py
Jetzt verfügt die Klasse aber auch über einen Callback, der sobald über die TCP Verbindung eine neue Nachricht (z.B. bei einem Anruf) automatisch eine durch den Nutzer definierte Funktion aufruft. Ein Beispiel ist hier zu finden: https://github.com/HcDevel/py-fritz-monitor/blob/master/example.py#L23
Das Problem ist jetzt, dass der Callback aufruf (https://github.com/HcDevel/py-fritz-monitor/blob/master/call-monitor.py#L35) nur an eine Funktion erfolgen kann. Jedoch ist es nicht möglich eine Unterfunktion einer initialisierten Klasse aufzurufen. Weiß da jemand wie das geht? Mir fehlt da jeglicher Ansatz. Das ganze sollte natürlich universal sein. Das heißt sowohl reine Funktionen als auch Klassen unterstützen.
Beitrag zuletzt geändert: 13.3.2014 19:47:28 von hc-tools -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Bin mir nicht sicher ob ich dich richtig verstehe, aber eigentlich ist das nicht weiter schwer, wenn man weiß wie:
>>> class Foo: def __init__(self): self.callback = None def callback(self): self.callback() >>> class Bar: def eineFunktion(self): print("Hallo Welt") >>> meinFoo = Foo() >>> meinBar = Bar() >>> meinFoo.callback = meinBar.eineFunktion # wichtig keine () dadurch wird die Funktion nicht ausgeführt, sondern als zeiger übergeben >>> meinFoo.callback() Hallo Welt
Ich hoffe ich habe dich richtig verstanden und ich konnte dir helfen.
P.S. schönes Projekt, gefällt mir -
Genau das ist es. Danke für die Antwort. Ich werde das dann mal im Code ändern.
Edit: Code ist geändert. Das kann ich auch gut für mein aktuelles Projekt (Siri API) gebrauchen.
Beitrag zuletzt geändert: 11.5.2014 17:57:12 von hc-tools -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage