Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #5881

[Python-de] Re: Code Style Review

Path csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail
From Hans-Peter Jansen <hpj@urpla.net>
Newsgroups de.comp.lang.python
Subject [Python-de] Re: Code Style Review
Date Wed, 30 Nov 2022 15:52:59 +0100
Lines 128
Message-ID <6509182.4vTCxPXJkl@xrated> (permalink)
References <tm2jhn$1k5h8$1@news1.tnib.de> <25b8d1d4-d6e2-22ee-4bed-ec76227fa65d@sschwarzer.net>
Mime-Version 1.0
Content-Type text/plain; charset="iso-8859-1"
Content-Transfer-Encoding quoted-printable
X-Trace news.uni-berlin.de qz4+/nT2G53YuZ19McEfjQCVrQIXVAsyGNLWGPfOPMrA==
Authentication-Results mail.python.org; dkim=none reason="no signature"; dkim-adsp=none (unprotected policy); dkim-atps=neutral
X-Virus-Scanned amavisd at 'smile.earth'
In-Reply-To <25b8d1d4-d6e2-22ee-4bed-ec76227fa65d@sschwarzer.net>
X-Provags-ID V03:K1:LF7QOSbbedrUeEfetJPpG+KVbE4xZegCeA6BtR3yP6VHYfFvwzj yJOjGWidnLH6z905lx4RUJPE3KqaT8iPDEhEqFJGe8uzQsBEMKJTZMBGd/fbXwH7fmeORCu wjfKU3hsuqBBPqrtkCd+Cg4iwTvFol4quZ3rfLojfk14Ry/f+9G3zuSBvhI+eGjCT7efpBW Gv+7IkrE5oMpgur1MEg+A==
X-Spam-Flag NO
X-UI-Out-Filterresults notjunk:1;V03:K0:Y1TF07QtjHc=:h6dmm7PxUPvfiSHQlDxi56 maVhzrYWl0sLIwL+LWUS+a+YyRNZ4DPquAC+VLL2EufRn9HVkqZep0OgIqHUXjCfvfHzpuD7J Di9wtXC15qnLKYb4ny4vfm2gIa2OJq6PUAgRo1GbxzjqULX6Unn8tgPItJkv2nHbRdAA6qxGX 7+iKF+ipJTltnZguVX+tPuaRHbBu5ppxvXgEBk0iCzXtjDvAOp+pZ3H7yfDunVlruh9/LLBgF +h83jUQb0VAT+12EZn49L0UmW4YrUshKONU27SfoPPH/qCqTJBI100hBH0URB48h1YMw75knF sp4SfHj85vhFb9Hf2YXHvsBMLB/almkN32FBnNpjf7X4qot6VC4A3wwSpm1dcGKQc4OEs2+Wu XMkgubnid/N7bASKI9/B8vS3xM6VhvN4sGuUbkRPDBRj0WqYxoA3NwOMmEhWJ5W6R3teZua18 y9s7zLC33pc9uoBcDVtutKc4cRSTCkJgCIkEqli+1W+JQ3/N+ehsjVF/LO9gjmZIe6L3WJbq7 wTttoQHWcZqCVIlt5bj3qHQwBs+5FncKAyBQWURhFmzG5JCZjRAh0AutHRuqAIXYz5C93/tgW znFNky8XvoQZJdVN4tdB19Hsa1MHRFGk8u72XunjPZNJEeW0Z85DnMY/ODTcRt8RrJy5P8Ma9 dfuU75TTDOj4YRUcI5JisFG2zMw764QZXDzA63NUU9rk0qSU2Wb7QjWEil2GXRd9G7d4tc+xR TCw6iKAdyqz51Er9UUdLOH6JWQv3MDDx9oqrthLGkEugGynW0TE2x+D14Ck77ADWfLOVru5i9 rdKv2SE
Message-ID-Hash OI2KRTCOCRKEG4RWY5SZ5CAHX2SIRF5K
X-Message-ID-Hash OI2KRTCOCRKEG4RWY5SZ5CAHX2SIRF5K
X-MailFrom hpj@urpla.net
X-Mailman-Rule-Misses dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-python-de.python.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
X-Mailman-Version 3.3.7
Precedence list
List-Id Die Deutsche Python Mailingliste <python-de.python.org>
Archived-At <https://mail.python.org/archives/list/python-de@python.org/message/OI2KRTCOCRKEG4RWY5SZ5CAHX2SIRF5K/>
List-Archive <https://mail.python.org/archives/list/python-de@python.org/>
List-Help <mailto:python-de-request@python.org?subject=help>
List-Owner <mailto:python-de-owner@python.org>
List-Post <mailto:python-de@python.org>
List-Subscribe <mailto:python-de-join@python.org>
List-Unsubscribe <mailto:python-de-leave@python.org>
Xref csiph.com de.comp.lang.python:5881

Show key headers only | View raw


Am Dienstag, 29. November 2022, 18:18:38 CET schrieb Stefan Schwarzer:
> Hallo Marc,
> 
> On 2022-11-28 16:19, Marc Haber wrote:
> 
> > ich wollte mich schon seit Jahren mal etwas ernsthafter mit python
> > beschäftigen und hier ist mein Erstlingswerk signifikanter Länge.
> > pylint hat nichts auszusetzen, an manchen Stellen habe ich pylint aber
> > überstimmt.
> > 
> > Ist da irgendetwas drin, was nicht pythonesk genug formuliert ist?
> > 
> > Laufen tut das Programm jedenfalls.
> > 
> > Ich würde mich über Eure Kommentare freuen.
> 
> 
> ich habe hier und da ein paar Anregungen. Wie immer gilt,
> dass letztlich der Autor entscheidet, wie er/sie diese
> Anregungen umsetzt. :-)

+1

> Erst mal zum Thema der Konfigurations-Speicherung, was in
> dem Diskussions-Thread auch aufgegriffen wurde. Da in Python
> Module und Klassen natürliche Singletons sind, wäre mein
> Vorschlag, die Konfigurations-Daten in einer Klasse zu
> speichern, also
> 
> ```
> class config:
> 
>      # Listener IP address and port of MQTT server.
>      ip_address = None
>      port = None
> 
>      # If `True`, print debugging output.
>      debug = False
> 
>      ...
> ```
> 
> Du kannst einfach von überall aus dem Modul auf das
> `config`-Objekt zugreifen und brauchst auch kein `global`.
> Die Klasse wird nie instanziiert, sondern nur als Namespace
> benutzt.

Yep, dem kann ich mich nur anschließen, und ich praktiziere diese Methode seit 
Jahrzehnten. Bei mir heißt diese Klasse <gpar>, da es mit <config> häufig zu 
Überschneidungen von anderen Funktionalitäten kommt (z.B. config files).

Grundsätzlich gilt es dabei abzuwägen, ob Du diese Werte
 * direkt wie globals verwendest <gpar.value>
   -> für skriptnahe Routinen
 * deinen Funktionen/Methoden gpar als Parameter <func(gpar)> übergibst
   -> skriptnahe Funktionen/Instanzen, die viele der Werte brauchen
 * die Konfigurationswerte einzeln übergibst <func(gpar.v1, gpar.v2)>
   -> für universell wiederverwendbare Funktionen/Klassen/Methoden

Vorab, ich erhebe nicht den Anspruch, irgendwie ausgesprochen pythonistisch zu 
sein, und setze in manchen Bereichen ganz bewusst oldschool-Ansätze ein (z.B. 
getopt). Komme von einem systemnahen Assembler und C-Umfeld, und habe mit 
Python im letzten Jahrtausend angefangen. Seitdem nutze ich es überall, wo es 
die Wahl gibt, als überaus nützliches, universelles Werkzeug, dass immer noch 
Spaß macht! Letzteres ist eines der wichtigsten Aspekte für die Beliebtheit 
der Sprache, die nicht in irgendwelchen strategischen Charts ihren Einstieg in 
Industrie-Projekte gefunden hat (wie beispielsweise Java).

Zu dem schon Gesagten möchte ich noch ergänzen:

Aus Gründen der Flexibilität verwende ich für einfache Skripte folgendes 
Muster:

def main(argv = None):
    """Command line interface and console script entry point."""
    if argv is None:
        argv = sys.argv[1:]
    [...]
    return 0

if __name__ == '__main__':
    sys.exit(main())

So kannst Du den Funktionsumfang des Skripts direkt, von anderen Modulen und 
auch mit setuptools benutzen.

Die --help Ausgabe findet sich in meinen Skripten meistens im __doc__ Bereich 
des Hauptmoduls, wie Du auch schon damit angefangen hast. So habe ich auch die 
Dokumentation da, wo ich sie *will*. Neben vielen Vorteilen hat das aber auch 
den Nachteil, Kommandozeilen Optionen nicht an einer Stelle fokussiert 
abzufrühstücken. Das funktioniert gut bis zu einer gewissen Größe des 
Projekts. 

Wie das in echt aussieht, kannst Du Dir ja mal hier anschauen:

https://github.com/frispete/vpndnshelper/blob/main/vpndnshelper.py

Vielleicht findest Du da auch noch die eine oder andere Anregung. Da Du dich 
scheinbar auch in einem unixoiden Umfeld bewegst, könnten dich die signal und 
exception Behandlungen der main Funktion interessieren. Dieses Skript läuft 
übrigens üblicherweise als systemd Dienst, hat aber noch nie einen Linter 
gesehen (und ja, das sollte ich auch mal tun..).

Cheers,
Pete
--
Life without chameleons is possible, but pointless.


Back to de.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Code Style Review Marc Haber <mh+usenetspam1118@zugschl.us> - 2022-11-28 16:19 +0100
  [Python-de] Re: Code Style Review c.buhtz@posteo.jp - 2022-11-28 15:37 +0000
    [Python-de] Re: Code Style Review Christopher Arndt <chris@chrisarndt.de> - 2022-11-28 16:48 +0100
      [Python-de] Re: Code Style Review c.buhtz@posteo.jp - 2022-11-28 19:53 +0000
      Re: [Python-de] Re: Code Style Review Marc Haber <mh+usenetspam1118@zugschl.us> - 2022-11-28 22:07 +0100
        [Python-de] Re: Code Style Review Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2022-11-29 18:51 +0100
          [Python-de] Re: Code Style Review Marc Haber <mh+python-de@zugschlus.de> - 2022-11-29 21:44 +0100
            [Python-de] Re: Code Style Review Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2022-11-29 23:16 +0100
    Re: [Python-de] Re: Code Style Review Marc Haber <mh+usenetspam1118@zugschl.us> - 2022-11-28 21:52 +0100
      [Python-de] Re: Code Style Review c.buhtz@posteo.jp - 2022-11-28 22:38 +0000
        Re: [Python-de] Re: Code Style Review Enrik Berkhan <Enrik.Berkhan@inka.de> - 2022-11-29 06:03 +0000
        Re: [Python-de] Re: Code Style Review Marc Haber <mh+usenetspam1118@zugschl.us> - 2022-11-29 15:22 +0100
          [Python-de] Re: Code Style Review c.buhtz@posteo.jp - 2022-11-29 14:39 +0000
      [Python-de] Re: Code Style Review Matthias Urlichs <matthias.urlichs@noris.de> - 2022-11-30 10:47 +0000
        [Python-de] Re: Code Style Review Marc Haber <mh+python-de@zugschlus.de> - 2022-12-01 21:30 +0100
          [Python-de] Re: Code Style Review Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2022-12-02 00:07 +0100
            Re: [Python-de] Re: Code Style Review "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2022-12-03 14:32 +0100
          [Python-de] Re: Code Style Review Matthias Urlichs <matthias.urlichs@noris.de> - 2022-12-02 09:29 +0000
            [Python-de] Re: Code Style Review Marc Haber <mh+python-de@zugschlus.de> - 2022-12-02 18:02 +0100
    [Python-de] Re: Code Style Review Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2022-11-29 18:33 +0100
  [Python-de] Re: Code Style Review Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2022-11-29 18:18 +0100
    [Python-de] Re: Code Style Review Hans-Peter Jansen <hpj@urpla.net> - 2022-11-30 15:52 +0100
    [Python-de] Re: Code Style Review Marc Haber <mh+python-de@zugschlus.de> - 2022-12-01 21:16 +0100
      [Python-de] Re: Code Style Review Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2022-12-01 23:58 +0100
        [Python-de] Re: Code Style Review Marc Haber <mh+python-de@zugschlus.de> - 2022-12-02 18:10 +0100
          Re: [Python-de] Re: Code Style Review "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2022-12-03 14:36 +0100

csiph-web