Hallo zusammen, ich bin gerade dabei ein paar Klassen zu basteln um meine Messgeräte zu steuern (Python3). Das Ganze soll am Ende so selbsterklärend wie möglich werden. Hierzu suche ich eine elegante Möglichkeit durch automatische Vervollständigung des Editors (in meinem Fall Visual Studio Code bzw. Jupyter Lab) die möglichen Funktionen direkt zur Auswahl zu bekommen. Ich stelle mir das ungefähr so vor: Ich erzeuge eine Instanz der Klasse für mein 34401A. Um nun die gewünschte Messfunktion zu konfigurieren schreibe ich dementsprechend etwas in der Art wie: hp34401.configure(function= Wenn ich nun Tab drücke würde ich gerne eine Auswahl an Strings sehen, die dann eine Auswahl zulassen wie "DCV", "ACV" usw. Das Ganze natürlich abhängig vom Messgerät. Ist so etwas machbar? Oder hat jemand eine bessere Idee sich bei der Konfiguration des Messgerätes möglichst weit von Autocompletion und Co unterstützen zu lassen? Besten Dank Philipp
Auto-Vervollständigung ist ja ein Feature des Editors, nicht der Programmiersprache. 🤔
Snippets sind das Stichwort Jedenfalls für VSC https://code.visualstudio.com/docs/editor/userdefinedsnippets Ähnliches gibt es auch für andere Editoren
Vielen Dank für eure Antworten. Mir ist schon klar, dass die Vervollständigung Sache des Editors ist, jedoch hatte ich gehofft, dass es ggf. noch ein paar Tricks gibt, die ich bisher nicht kenne um dem Editor über den Python Code zu verraten was hier alles passen könnte. Was man z.B. ja tun kann ist eine Klasse mit den entsprechenden Parametern anzulegen. In etwa so: class functions(): def __init__(self): self.DCV = "ACV" self.DCI = "DCI" self.ACV = "ACV" self.ACI = "ACI" self.OHM2W = "OHM2W" self.OHM4W = "OHM4W" self.Frequency = "Freq" Dann erzeuge ich eine Instanz dieser Klasse in der Instanz der Messgeräteklasse und kann dann die Funktion z.B. so setzen: hp34401.conf(hp34401.function.DCV) Im Anhang ist ein Bildchen wie es im Jupyter Lab dann auch vorgeschlagen werden kann. Das finde ich aber noch ein wenig sperrig beim verwenden. Ggf. gibt es hier bessere Ideen. Ziel soll es sein, beim Verwenden dieser Klassen die Möglichkeiten der Messgeräte über die Autovervollständigung vorgeschlagen zu bekommen. Egal ob es nun die Funktionen eines DMM sind oder die möglichen Wellenformen des Signalgenerators oder was auch immer.
Statt der Instanz der selber gebastelten Klasse würde ich hier Enums verwenden. https://docs.python.org/3/library/enum.html In der Funktion vergleichst du dann nicht einen string sondern den Enum Wert.
1 | If function == Modes.ACV: |
2 | ... |
Als Bequemlichkeit damit man trotzdem strings übergeben kann wenn man will kannst du das Argument konvertieren in der Funktion.
1 | If not isinstance(function, Modes): |
2 | function = Modes(function) #ungetestet, aber grobe Idee sollte gehen |
Andere Kleinigkeit: mehr "Pythonic" wäre eventuell das verwenden von getter/setter properties.
1 | hp34401.mode = Modes.ACV |
Aber das ist natürlich Geschmackssache und wenn es bspw. Eine C API oder so schon gibt ist es im Zweifel besser nah daran zu bleiben als alle tollen Python Features zu nutzen.
Eine gute IDE kommt mit DocStrings zurecht. Vielleicht solltest du das mal gockeln.
Phillip nutzt wie oben erwähnt Visual Studio Code bzw. Jupyter Lab. Die können beide mit docstring umgehen. Ich würde auch eher enums nutzen. Beim docstring sollten die Funktionsparameter als reStructuredText formatiert sein, dann stellt VSCode den docstring ggf. besser dar:
1 | def configure(mode: Mode, label: str): |
2 | """Configure Measuring Mode...
|
3 | :param mode: Mode.ACV, Mode.DCV, Mode.DCI, Mode.ACI
|
4 | :param label: Labeltext
|
5 | :returns: errorcode ...
|
6 | """
|
7 | #...
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.