Path: csiph.com!aioe.org!hBn1UzxMYb3WbdAUWEjDLA.user.gioia.aioe.org.POSTED!not-for-mail From: Marc 'BlackJack' Rintsch Newsgroups: de.comp.lang.python Subject: Re: Konstanten in Struct-Form in Python Date: Wed, 28 Apr 2021 10:04:42 +0000 (UTC) Organization: Aioe.org NNTP Server Lines: 58 Message-ID: References: NNTP-Posting-Host: hBn1UzxMYb3WbdAUWEjDLA.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: Pan/0.144 (Time is the enemy; 28ab3ba git.gnome.org/pan2) X-Notice: Filtered by postfilter v. 0.9.2 Xref: csiph.com de.comp.lang.python:5731 On Mon, 22 Feb 2021 07:00:47 +0100, Michael S. wrote: > Ich habs jetzt so gemacht. Da muss ich in der Anwendung nur die > CAN-Signals_Klasse instanzieren, dafür halt in der Lib jeweils jedes > eigene Signal. Aber die Lib wird eh automatisch generiert. > > class C_frequency: > def __init__(self): > self.ID = "10FC80FC" > self.BitOffset = 48 self.BitLength = 8 self.Gain = 1 self.ValueOffset > = 0 self.Unit = "Hz" > self.Rate = 0.5 > > class C_OutputVoltage: > def __init__(self): > self.ID = "25FF1250" > self.BitOffset = 32 self.BitLength = 16 self.Gain = 0.1 > self.ValueOffset = 0 self.Unit = "V" > self.Rate = 0.25 > > class C_Cable_temp: > def __init__(self): > self.ID = "12FA5AFC" > self.BitOffset = 0 self.BitLength = 8 self.Gain = 1 self.ValueOffset = > -40 self.Unit = "°C" > self.Rate = 10 > > class CAN_Signals: > def __init__(self): > self.frequency = C_frequency() self.OutputVoltage = C_OutputVoltage() > self.Cable_temp = C_Cable_temp() Verschiedene Klassen mit genau den gleichen Attributen sieht ”falsch” aus. Da würde man eher *eine* Klasse schreiben, die die Attribute hat, und davon dann mehrere Exemplare erstellen. Mit `collections.namedtuple()` und Namen die sich an PEP8 halten, könnte das dann so aussehen: from collections import namedtuple Signal = namedtuple( "Signal", "id bit_offset bit_length gain value_offset unit rate" ) FREQUENCY = Signal("10FC80FC", 48, 8, 1, 0, "Hz", 0.5) OUTPUT_VOLTAGE = Signal("25FF1250", 32, 16, 0.1, 0, "V", 0.25) CABLE_TEMPERATURE = Signal("12FA5AFC", 0, 8, 1, -40, "°C", 10) Ciao, Marc 'BlackJack' Rintsch -- “I don't care WHO you are but your not walking on the water while I'm fishing”