Re: [Python-de] Probleme pythonisch lösen

21/08/2013 - 10:51 von Diez Roggisch | Report spam

This message is in MIME format. Since your mail reader does not understand


this format, some or all of this message may not be legible.




ich wende mich mal wieder an Euch da ich ein (eurer Meinung nach) gutes
Nachschlagewerk bzw. eine Website oder Web- Dokument suche welches mir die Art
und Weise nahebringt wie man bestimmte Aufgaben in Python umsetzt. Ich komme
aus von der Sprache C und ich denke meine Python Programme orientieren sich
sehr an diesem Stil. Ich hab bisher in dem Gallileo OpenBook gestöbert aber in
einer der letzten Posts wurde erwà¤hnt dass diese Dokument nicht sonderlich
geeignet wà¤re um Python richtig zu erlernen.

Kurze Beschreibung meiner Applikation:

Ich beabsichtige mittels GPIB mehrere Messgerà¤te auszulesen und die Messwerte
dann entsprechend weiter zu verarbeiten.

Im ersten Ansatz habe ich eine Klasse GPIB_BUS erstellt welche folgende
Eigenschaften besitzt:
Methonden:
__init__(self)
__scanBus__(self)
__getBusDeviceList__(self)


Die Doppel-Unterstrich (neulich gehoert: "dunder"…) Bezeichnung von Methoden
ist gedacht fuer Python-eigene spezielle Methoden, wie zB eben _init_, dem
Initialisierungs-Code der Klasse.

Bei deinen eigenen Methoden und Namen hat das nichts zu suchen.



receiveSCPI_Message(self)

Attribute:
DeviceList
__connectedDevices



Lies dir mal bitte PEP8 durch. Dort werden Namenskonventionen vorgeschlagen,
denen man folgen sollte, um den Code verstaendlicher zu machen. Zum einen
sind CamelCase-Namen fuer Klassen reserviert, Attribute & Methoden werden
klein und ggf mit Unterstrich geschrieben.

Und zum anderen fuehrt der dunder von __connectedDevices dazu, dass der Name
"gemangled" wird. Das wird gerne falsch verstanden als "Ditt is privat". So
ist es weder gemeint (es dient dazu, Namenskonflikte in
Ableitungshierarchien vorzubeugen), noch ist die Semantik gegeben (ich kann
da trotzdem drauf zugreifen). Stattdessen werden dadurch subtile Fehler
moeglich, weil in abgeleiteten Klassen ein anderes Attribut damit gemeint
ist.




BusStatus

Fà¼r das entsprechende angeschlossene Messgerà¤t erstellte ich eine Klasse wie
z. B. Agilent34405A
Die von GPIB_BUS abzuleiten nicht sehr zweckmà¤àŸig ist da ich dann alle
angeschlossenen Gerà¤te in diesem einen Gerà¤t wieder finde und ja eigentlich
nur die Eigenschaften diese Gerà¤tes beim Benutzen der Klasse von Belang sind.
Methoden:
__init__(self)
Configure(self, messbereich, messgroesse, signalform)



Wieso ist das nicht Teil des Konstruktors?


getMeasurement(self)

Attribute:
__AC_Current_max__
__AC_Current_min__
__func_arg__
__meas_arg__
__range_arg__



Schon wieder die dunders. Weglassen.

usw.

Ich könnte mir deshalb vorstellen dass ich eine Klasse GPIB_BUS erstelle von
der nicht abgeleitet wird sondern nur als Modul Verwendung findet und von
einer Klasse GPIB_DEVICE importiert wird von der dann Klassen spezieller
Gerà¤te wie z. B. Agilent34405A abgeleitet werden.



Hoert sich sinnvoller an als von Bus abzuleiten. Hat aber mit Python nix zu
tun, sondern ist generell OO. Oder geht's dir auch darum?


Hier bin ich auch à¼ber das Stichwort der Properties gestolpert welches mir das
Leben mit dieser Problemstellung erleichtern könnte allerdings waren die von
mir gefundenen Erlà¤uterungen wann und wie ich Properties richtig und sinnvoll
einsetzte nicht besonders aufschlussreich.

Ich hoffe ihr könnt mich an Dokumente verweisen, die mir aufzeigen wie solche
Problemstellungen „pythonisch“ gelöst werden wà¼rden.



Kenne ich nix. Code schreiben, lesen, kritisieren lassen :)

LG Diez






<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif; "><span id="OLK_SRC_BODY_SECTION"><div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt"><b><br></b></div><blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;"><div xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office...omml" xmlns="http://www.w3.org/TR/REC-html40"><div lang="DE" link="blue" vlink="purple"><div class="WordSection1"><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">ich wende mich mal wieder an Euch da ich ein (eurer Meinung nach) gutes Nachschlagewerk bzw. eine Website oder Web- Dokument suche welches mir die Art und Weise
nahebringt wie man bestimmte Aufgaben in Python umsetzt. Ich komme aus von der Sprache C und ich denke meine Python Programme orientieren sich sehr an diesem Stil. Ich hab bisher in dem Gallileo OpenBook gestöbert aber in einer der letzten Posts wurde erwà¤hnt
dass diese Dokument nicht sonderlich geeignet wà¤re um Python richtig zu erlernen.<o:p></o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Kurze Beschreibung meiner Applikation:<o:p></o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Ich beabsichtige mittels GPIB mehrere Messgerà¤te auszulesen und die Messwerte dann entsprechend weiter zu verarbeiten.<o:p></o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Im ersten Ansatz habe ich eine Klasse GPIB_BUS erstellt welche folgende Eigenschaften besitzt:<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Methonden:<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">__init__(self)<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">__scanBus__(self)<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">__getBusDeviceList__(self)<o:p></o:p></span></p></div></div></div></blockquote></span><div>Die Doppel-Unterstrich (neulich gehoert: "dunder"&#8230;) Bezeichnung von Methoden ist gedacht fuer Python-eigene spezielle Methoden, wie zB eben _init_, dem Initialisierungs-Code der Klasse.</div><div><br></div><div>Bei deinen eigenen Methoden und Namen hat das nichts zu suchen.</div><div><br></div><div><br></div><span id="OLK_SRC_BODY_SECTION"><blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;"><div xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office...omml" xmlns="http://www.w3.org/TR/REC-html40"><div lang="DE" link="blue" vlink="purple"><div class="WordSection1"><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">receiveSCPI_Message(self)<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Attribute:<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">DeviceList<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">__connectedDevices</span></p></div></div></div></blockquote></span><div><br></div><div>Lies dir mal bitte PEP8 durch. Dort werden Namenskonventionen vorgeschlagen, denen man folgen sollte, um den Code verstaendlicher zu machen. Zum einen sind CamelCase-Namen fuer Klassen reserviert, Attribute &amp; Methoden werden klein und ggf mit Unterstrich geschrieben.</div><div><br></div><div>Und zum anderen fuehrt der dunder von __connectedDevices dazu, dass der Name "gemangled" wird. Das wird gerne falsch verstanden als "Ditt is privat". So ist es weder gemeint (es dient dazu, Namenskonflikte in Ableitungshierarchien vorzubeugen), noch ist die Semantik gegeben (ich kann da trotzdem drauf zugreifen). &nbsp;Stattdessen werden dadurch subtile Fehler moeglich, weil in abgeleiteten Klassen ein <span style="font-weight: bold; ">anderes</span>&nbsp;Attribut damit gemeint ist.</div><div><br></div><div><br></div><div><br></div><span id="OLK_SRC_BODY_SECTION"><blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;"><div xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office...omml" xmlns="http://www.w3.org/TR/REC-html40"><div lang="DE" link="blue" vlink="purple"><div class="WordSection1"><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">BusStatus<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Fà¼r das entsprechende angeschlossene Messgerà¤t erstellte ich eine Klasse wie z. B. Agilent34405A<o:p></o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Die von GPIB_BUS abzuleiten nicht sehr zweckmà¤àŸig ist da ich dann alle angeschlossenen Gerà¤te in diesem einen Gerà¤t wieder finde und ja eigentlich nur die Eigenschaften
diese Gerà¤tes beim Benutzen der Klasse von Belang sind.<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Methoden:<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">__init__(self)<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Configure(self, messbereich, messgroesse, signalform)</span></p></div></div></div></blockquote></span><div><br></div><div>Wieso ist das nicht Teil des Konstruktors?</div><div><br></div><span id="OLK_SRC_BODY_SECTION"><blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;"><div xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office...omml" xmlns="http://www.w3.org/TR/REC-html40"><div lang="DE" link="blue" vlink="purple"><div class="WordSection1"><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">getMeasurement(self)<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span lang="FR" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Attribute:<o:p></o:p></span></p><p class="MsoNormal"><span lang="FR" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">__AC_Current_max__<o:p></o:p></span></p><p class="MsoNormal"><span lang="FR" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">__AC_Current_min__<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">__func_arg__
<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">__meas_arg__<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">__range_arg__</span></p></div></div></div></blockquote></span><div><br></div><div>Schon wieder die dunders. Weglassen.</div><span id="OLK_SRC_BODY_SECTION"><blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;"><div xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office...omml" xmlns="http://www.w3.org/TR/REC-html40"><div lang="DE" link="blue" vlink="purple"><div class="WordSection1"><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">usw.<o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Ich könnte mir deshalb vorstellen dass ich eine Klasse GPIB_BUS erstelle von der nicht abgeleitet wird sondern nur als Modul Verwendung findet und von einer Klasse
GPIB_DEVICE importiert wird von der dann Klassen spezieller Gerà¤te wie z. B. Agilent34405A abgeleitet werden.</span></p></div></div></div></blockquote></span><div><br></div><div>Hoert sich sinnvoller an als von Bus abzuleiten. Hat aber mit Python nix zu tun, sondern ist generell OO. Oder geht's dir auch darum?</div><span id="OLK_SRC_BODY_SECTION"><blockquote id="MAC_OUTLOOK_ATTRIBUTION_BLOCKQUOTE" style="BORDER-LEFT: #b5c4df 5 solid; PADDING:0 0 0 5; MARGIN:0 0 0 5;"><div xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office...omml" xmlns="http://www.w3.org/TR/REC-html40"><div lang="DE" link="blue" vlink="purple"><div class="WordSection1"><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p></o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Hier bin ich auch à¼ber das Stichwort der Properties gestolpert welches mir das Leben mit dieser Problemstellung erleichtern könnte allerdings waren die von mir
gefundenen Erlà¤uterungen wann und wie ich Properties richtig und sinnvoll einsetzte nicht besonders aufschlussreich.<o:p></o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; "><o:p>&nbsp;</o:p></span></p><p class="MsoNormal"><span style="font-size: 10pt; color: black; font-family: Arial, sans-serif; ">Ich hoffe ihr könnt mich an Dokumente verweisen, die mir aufzeigen wie solche Problemstellungen &#8222;pythonisch&#8220; gelöst werden wà¼rden.</span></p></div></div></div></blockquote></span><div><br></div><div>Kenne ich nix. Code schreiben, lesen, kritisieren lassen :)</div><div><br></div><div>LG Diez</div><div><br></div><div><br></div></body></html>

 

Lesen sie die antworten

#1 Wolfgang Keller
21/08/2013 - 17:13 | Warnen spam
Lies dir mal bitte PEP8 durch. Dort werden Namenskonventionen
vorgeschlagen, denen man folgen sollte, um den Code verstaendlicher
zu machen. Zum einen sind CamelCase-Namen fuer Klassen reserviert,



<duck>

WelcherExpletiveHatEigentlichCamelCaseErfunden.

Ich_finde_Namen_mit_Unterstrichen_viel_besser_lesbar_für_Menschen.

UAbknghrnvrbtn.

</duck>

;->



MfG,

Wolfgang

Ähnliche fragen