Hi, ich habe gerade einen Blackout und benötige eine kleine Erleuchtung.
Ich möchte eine generische API für Labornetzteile programmieren. Also sowas wie pwr.set_voltage(), pwr.get_current() usw. Das soll für alle Netzteile gleich sein.
Allerdings können sich die Protokolle unterscheiden und auch die Hardwareschnittstelle kann von RS232 bis Ethernet reichen.
Ich stehe gerade komplett auf dem Schlauch, wie man das in Python macht. In Rust würde ich vermutlich ein Trait verwenden und für jedes Netzteil eine eigene Implementierung. Aber für Python fehlen mir gerade die passenden Suchbegriffe.
Universelle Schnittstelle für Labornetzteile: ich steh gerade auf dem Schlauch
- __blackjack__
- User
- Beiträge: 13117
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@burli: In Python denkst Du Dir das/den Trait falls es keine Funktionskörper enthält einfach und schreibst für jedes Netzteil eine eigene Implementierung. Ansonsten halt eine (abstrakte) Basisklasse und dann für jedes Netzteil eine Implementierung.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Eigentlich hast du Recht, ich kann ja einfach jedes Netzteil mit import xyz as pwr importieren. Eigentlich bin ich doof :Facepalm:
Ich danke dir für das Licht im Dunkel
Ich danke dir für das Licht im Dunkel
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
- __blackjack__
- User
- Beiträge: 13117
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Traits sind nicht ganz das gleiche wie Klassen, weil man bei Klassen in der Regel nur von einer Basisklasse erbt, aber das Beispiel aus Rust by Example https://doc.rust-lang.org/rust-by-example/trait.html kann man im Python in etwa so umsetzen:
Code: Alles auswählen
#!/usr/bin/env python3
class Animal:
def __init__(self, name, is_naked=False):
self.name = name
self.is_naked = is_naked
@property
def noise(self):
raise NotImplementedError
def talk(self):
print(f"{self.name} says {self.noise}")
class Sheep(Animal):
@property
def noise(self):
return "baaaaah" + ("?" if self.is_naked else "!")
def talk(self):
print(f"{self.name} pauses briefly... {self.noise}")
def shear(self):
if self.is_naked:
print(f"{self.name} is already naked...")
else:
print(f"{self.name} gets a haircut!")
self.is_naked = True
def main():
dolly = Sheep("Dolly")
dolly.talk()
dolly.shear()
dolly.talk()
if __name__ == "__main__":
main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman