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
Verwendung von Flags
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.
Ansonsten zeige Code, der Dein Problem zeigt.
- DeaD_EyE
- User
- Beiträge: 1240
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
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?
Wenn du aus der Klasse eine Instanz erstellst, wird die Verbindung automatisch geöffnet, wenn port != None ist.
Was willst du da vorher abfragen?
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Randbemerkung: Das müsste übrigens `is_open` heissen und nicht `isOpen()`.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
- DeaD_EyE
- User
- Beiträge: 1240
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
`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.__blackjack__ hat geschrieben: Dienstag 15. September 2020, 11:26 Randbemerkung: Das müsste übrigens `is_open` heissen und nicht `isOpen()`.
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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
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.
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.
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Lucathon: Du hast da halt eine Klasse für die serielle Verbindung und da ein Flag das den Zustand anzeigt:
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
class SerialConnection:
def __init__(self, ...):
...
self.is_open = ...
...
def some_method(self, ...):
...
self.is_open = ...
...
Code: Alles auswählen
def some_function(..., connection, ...):
...
if connection.is_open:
...
...
“Vir, intelligence has nothing to do with politics!” — Londo Mollari