Seite 1 von 1

Verwendung von Flags

Verfasst: Dienstag 15. September 2020, 08:43
von Lucathon
Hallo Leute, ich habe immer wieder mal kleine Probleme, wie ich etwas syntaktisch am besten umsetze, in meinem Fall jetzt unabhängig von der Programmiersprache.

Heute hätte ich von euch gerne Lösungen für folgenden Sachverhalt (in Python):

Ich habe eine Klasse die für mich eine serielle Schnittstelle aufbaut. In dieser befindet sich ein Flag, welches mir immer sagt ob die Schnittstelle gerade offen oder geschlossen ist.

Das Auslesen der Schnittstelle habe ich dabei in eine extra Datei ausgelagert, in der sich verschiedene Funktionen befinden, welche auf verschiedene Arten auslesen sollen. Jede dieser Funktionen fragt zuerst ob die Schnittstelle geöffnet ist, fragt also dieses Flag ab (while isOpen...) und liest dann solange aus bis das Flag False gesetzt wird. Bei einem Fehler wird das Flag ebenfalls auf False gesetzt.

Meine Frage ist jetzt, wie baue ich am besten dieses Flag in meinen Code ein, sodass die Klasse und die Datei mit den Funktionen beide dieses Flag auslesen können und editieren?

Ich fand es nämlich nicht sinnvoll in der Datei mit den Funktionen die Klasse zu importieren, da die Klasse eben diese Datei schon importiert. Sorry wenn das alles hier ein bisschen verwiirend und unprofessionel ist.

LG

Re: Verwendung von Flags

Verfasst: Dienstag 15. September 2020, 10:16
von Sirius3
Ich verstehe die Frage nicht. Wenn eine Funktion die Klasse braucht, muß sie importiert werden. Wenn sie nur auf der Instanz arbeitet und diese als Argument bekommt, dann nicht.
Ansonsten zeige Code, der Dein Problem zeigt.

Re: Verwendung von Flags

Verfasst: Dienstag 15. September 2020, 11:20
von DeaD_EyE
isOpen ist eine Methode, die zurückliefert, ob die Verbindung geöffnet ist.
Wenn du aus der Klasse eine Instanz erstellst, wird die Verbindung automatisch geöffnet, wenn port != None ist.
Was willst du da vorher abfragen?

Re: Verwendung von Flags

Verfasst: Dienstag 15. September 2020, 11:26
von __blackjack__
Randbemerkung: Das müsste übrigens `is_open` heissen und nicht `isOpen()`.

Re: Verwendung von Flags

Verfasst: Dienstag 15. September 2020, 17:01
von DeaD_EyE
__blackjack__ hat geschrieben: Dienstag 15. September 2020, 11:26 Randbemerkung: Das müsste übrigens `is_open` heissen und nicht `isOpen()`.
`isOpen existiert` noch und ruft die Methode `is_open` auf, sollte aber irgendwann mal aus der Bibliothek herausfliegen, da es seit 3.0 als veraltet gilt, genauso wie alle anderen camelCase Methoden.
Jedenfalls sollte man die alten Methoden nicht mehr verwenden, da irgendwann die Methoden endgültig entfernt werden. Das ist nur für diejenigen noch mit drin, die ihren Code immer noch nicht angepasst haben.
So ein deprecation-prozess dauert immer eine halbe Ewigkeit.

PS: Wer diesen Text liest, sollte noch mal auf das Datum schauen. Möglicherweise gibt es die Methoden isOpen zu dem Zeitpunkt nicht mehr.

Re: Verwendung von Flags

Verfasst: Mittwoch 16. September 2020, 10:55
von Lucathon
Vielleicht ist das ganze doof ausgedrückt.

ImGrunde habe ich eine Klasse die mir die serielle Schnittstelle öffnet und eine Funktion in einer anderen Datei die immer wieder ein Flag überprüfen soll und ebenfalls auch modifizieren können soll. Die Klasser der seriellen Schnittstelle soll das Flag aber auch modifizieren können. Jetzt weis ich nicht wie ich das ganze geschickt anstelle.

Re: Verwendung von Flags

Verfasst: Mittwoch 16. September 2020, 11:19
von Sirius3
Zeige Code.

Re: Verwendung von Flags

Verfasst: Mittwoch 16. September 2020, 12:16
von __blackjack__
@Lucathon: Was ist denn das konkrete Problem dabei? Du willst Zustand der über Aufrufe hinweg erhalten bleibt und Du hast eine Klasse. Das ist dann einfach ein Attribut dieser Klasse. Eventuell ein Property falls es sich letztlich tatsächlich um `serial.Serial.is_open` handelt was quasi ”weitergereicht” werden soll.

Re: Verwendung von Flags

Verfasst: Donnerstag 17. September 2020, 14:05
von __blackjack__
@Lucathon: Du hast da halt eine Klasse für die serielle Verbindung und da ein Flag das den Zustand anzeigt:

Code: Alles auswählen

class SerialConnection:
    def __init__(self, ...):
        ...
        self.is_open = ...
        ...
    
    def some_method(self, ...):
        ...
        self.is_open = ...
        ...
Und Deine Funktion (und dabei ist es völlig egal wo die definiert ist) bekommt ein Exemplar von diesem Objekt als Argument übergeben und kann dann das Attribut `is_open` von dem Objekt problemlos abfragen:

Code: Alles auswählen

def some_function(..., connection, ...):
    ...
    if connection.is_open:
        ...
    ...