[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]