Eigenes Modul / Klasse: Fremd-Modul pySerial - wie richtig?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Eigenes Modul / Klasse: Fremd-Modul pySerial - wie richtig?

Beitragvon whaeva » Mittwoch 25. Februar 2009, 15:56

Für eine Reihe von seriell angeschlossenen Geräten brauche ich Module zur Kommunikation. Mittel der Wahl ist da wohl pySerial:
http://pyserial.wiki.sourceforge.net/pySerial

modul.py:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# kommentar
"""
docstring

"""

import sys
import serial


class Device(object):
   """
   docstring
   """
   
   def __init__(self, port):
      self.serial = serial.Serial()            # pySerial
      self.serial.port = port
      self.serial.baudrate = 19200
      self.serial.timeout = 2                  # seconds
      self.serial.bytesize = serial.EIGHTBITS
      self.serial.parity = serial.PARITY_NONE
      self.serial.stopbits = serial.STOPBITS_ONE
...


Die Klasse bekommt eine Methode in der der Port geöffnet wird und wo dann die Kommunikation stattfindet. Die Instanz liefert dann z.B. ein tuple mit Werten

Code: Alles auswählen

dev = Device("/dev/ttyS0")
dev.read()
-> (datum1, datum2, ..)


Leider habe ich praktisch noch keine Erfahrung mit OO, deshalb würde ich mich über ein paar Tipps freuen, wie man das Ganze "besser" lösen kann (ich habe das ungute Gefühl, dass das geht :-).

Z.B. frage ich mich, ob es nötig ist, jedesmal den Port neu zu öffnen - in der Hinsicht, dass diese Module später mal irgendwie als Threads zusammenwerkeln sollen und dann quasi ständig aktiv sind.
Da muss ich mich noch einlesen.

Die unmittelbarere Frage ist, ob der Weg, innerhalb meiner Klasse eine Instanz von pySerial zu erzeugen, der richtige ist - unter welchen Umständen würde man pySerial "erweitern"?

Ist es ratsam, die Daten als Rückgabewert zu übergeben, oder sollten lieber Attribute verwendet werden? Oder sogar ein eigenes Objekt zur Datenübergabe?

Lassen sich Shebang, Kommentare und Docstring so gemischt in einem Modul benutzen?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Beitragvon derdon » Mittwoch 25. Februar 2009, 16:05

whaeva hat geschrieben:Lassen sich Shebang, Kommentare und Docstring so gemischt in einem Modul benutzen?


Ja. Das hättest du aber auch selber herausfinden können indem du ein Minimalbeispiel erstellst, das auf dieses Problem reduziert ist.
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Beitragvon whaeva » Mittwoch 25. Februar 2009, 16:06

> Die Klasse bekommt eine Methode in der der Port geöffnet wird
> ..
> Z.B. frage ich mich, ob es nötig ist, jedesmal den Port neu zu öffnen

Ist es nicht möglich, dass das Objekt die Verbindung beinhaltet? Dann müsste das serial.open() einfach schon in der Klasse stattfinden.

Gab's da nicht auch was, das dann beim "Tod" der Instanz automatisch die Verbindung schließt?
BlackJack

Beitragvon BlackJack » Mittwoch 25. Februar 2009, 21:11

@whaeva: Python hat keine deterministischen Destruktoren, also musst Du selber sicherstellen, dass Resourcen wieder freigegeben werden.

Neben einer `close()`-Methode oder etwas vergleichbarem könntest Du Dir die ``with``-Anweisung anschauen und wie man Objekte implementiert, die damit zusammenarbeiten.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]