[Python-de] Re: paho-mqtt und vorgegebene Callback-Funktione n in einer Klasse.
"Peter J. Holzer" <[email protected]> Sun, 11 Jun 2023 22:06:39 +0200
| Newsgroups | gmane.comp.python.general.german |
|---|---|
| Organization | LUGA |
| Message-ID | <[email protected]> |
On 2023-06-11 19:41, Marc Haber <[email protected]> wrote: > Hartmut Goebel <[email protected]> wrote: >>Am 11.06.23 um 19:12 schrieb Marc Haber: >>> | def on_connect(self, client, userdata, flags, rcode): >>> | client.subscribe('tele/wama/SENSOR') >>> [_] >>> | client = mqtt.Client() >>> | client.on_connect = on_connect >> >>Diese Zeile muss lauten: >> >> client.on_connect =*self.*on_connect >> >>Es wundert mich, dass Dein Code überhaupt funktioniert, denn >>"on_connect" ist nicht definiert. Oder hast Du das nur zu viel gekürzt?! > > Der Code hat nicht funktioniert, das hatte ich gar nicht probiert weil > ich ja wusste dass da irgendwas nicht passt. > > Kannst Du mir erklären, warum das funktioniert Ich bin mir nicht ganz sicher, was Du mit "das" meinst, aber ich vermute: > obwohl die Memberfunktion den zusätzlichen self-Parametrer hat? Die Expression self.on_connect ergibt eine "bound method". Die ist also jetzt an das Objekt gebunden, und wenn man aufruft, wird das gebundene Objekt an seine Methode übergeben. Vergleiche: #!/usr/bin/python3 class C: def m(self, *args, **kwargs): print(self, args, kwargs) o = C() print(o) f = o.m print(f) f(1, 2, 3) f(1, x=2, y=3) Das ist auf den ersten Blick überraschend, aber »o.m()« ist ja syntaktisch nichts anderes als »(o.m)()«, also sollte man das in »f = o.m; f()« zerlegen können. Und so ist es auch. hp _______________________________________________ python-de Mailingliste -- [email protected] Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an [email protected] https://mail.python.org/mailman3/lists/python-de.python.org/ Mitgliedsadresse: [email protected]