Classes in Python met partial()

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • ThaStealth
  • Registratie: Oktober 2004
  • Laatst online: 08-10 16:03
Ik heb een probleem met een nieuwe module die ik aan het maken ben, en als Python dummy kom er maar niet uit:

Ik heb de volgende externe library die ik wil gebruiken:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from functools import partial
import logging

def create_protocol(callback, loop=None):
    settings = "serial"
    parser = "parser";
    protocol = partial(Protocol, loop, parser, callback=callback)
    return protocol, settings

class Protocol():
    callback = None

    def __init__(self, loop, parser, callback=None):
        self.loop = loop
        self.log = logging.getLogger(__name__)
        self.parser = parser
        self.callback = callback

    def data_received(self, data):
        data = data.decode('ascii')
        self.log.debug('received data: %s', data)


Hoe moet ik nou de create_protocol en data_received functies aanroepen zodat hij het ook nog eens doet
Deze code miept erover dat de self.log niet gezet is:

Python:
1
2
3
4
5
6
from protocol import create_protocol

payload = "message";
reader_factory, _ = create_protocol("callback","loop")
reader_factory();
reader_factory.func.data_received(reader_factory,data =payload.encode())

Mess with the best, die like the rest

Beste antwoord (via ThaStealth op 08-01-2018 21:49)


  • user109731
  • Registratie: Maart 2004
  • Niet online
ThaStealth schreef op maandag 8 januari 2018 @ 19:45:
Python:
1
2
3
reader_factory, _ = create_protocol("callback","loop")
reader_factory();
reader_factory.func.data_received(reader_factory,data =payload.encode())
Wat denk je dat die tweede regel doet? :)

reader_factory() geeft je een nieuw Protocol object. Daarop kun je dan data_received(payload.encode()) aanroepen (zonder reader_factory mee te geven, self is impliciet).

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
ThaStealth schreef op maandag 8 januari 2018 @ 19:45:
Python:
1
2
3
reader_factory, _ = create_protocol("callback","loop")
reader_factory();
reader_factory.func.data_received(reader_factory,data =payload.encode())
Wat denk je dat die tweede regel doet? :)

reader_factory() geeft je een nieuw Protocol object. Daarop kun je dan data_received(payload.encode()) aanroepen (zonder reader_factory mee te geven, self is impliciet).

Acties:
  • 0 Henk 'm!

  • ThaStealth
  • Registratie: Oktober 2004
  • Laatst online: 08-10 16:03
JanDM schreef op maandag 8 januari 2018 @ 20:51:
[...]

Wat denk je dat die tweede regel doet? :)

reader_factory() geeft je een nieuw Protocol object. Daarop kun je dan data_received(payload.encode()) aanroepen (zonder reader_factory mee te geven, self is impliciet).
Ja het was heel simpel, als je maar beseft hoe de werking is :)

Ik realiseerde met niet dat reader_factory() een Protocol object teruggeeft, ik dacht dat reader_factory al een object was.

Mess with the best, die like the rest