Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Python: flexibles import möglich?
Autor
Kein bestimmter Bereich Python: flexibles import möglich?
Goswin
Senior Letzter Besuch: im letzten Monat
Dabei seit: 18.09.2008
Mitteilungen: 1728
Wohnort: Chile, Ulm
  Themenstart: 2021-08-23

In einer Anweisung wie \sourceon Python_3.2 from pydatei import objekt \sourceoff muss "pydatei" bekanntlich ein Dateiname und keine Stringvariable sein. Nun muss man aber manchmal je nach Parameter pynum in {'01',...,'09'} das benötigte Objekt aus verschiedenen Dateien pydatei01.py, ..., pydatei09.py importieren. Eine wenig elegante Lösung wäre natürlich, die jeweilige Datei zum Lesen zu öffnen und auszulesen (wobei ich mir nicht einmal sicher bin, ob der gelesene String auch leicht in das gewünschte Objekt umgewandelt werden kann). Oder man könnte alle möglichen import-Anweisungen in ein langes 'if-elif-...-elif-else' -Konstrukt einbinden. Sind das (euer Meinung nach) die besten Alternativen?


   Profil
schnitzel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 26.02.2009
Mitteilungen: 214
  Beitrag No.1, eingetragen 2021-08-23

Hi, hört sich auf den ersten Blick etwas nach "Codesmell" an, aber es gibt die Importlib. hier Gruß


   Profil
__blackjack__
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 23.09.2021
Mitteilungen: 81
  Beitrag No.2, eingetragen 2021-09-24

Hi Goswin, Gemäss dem Python Zen „Explicit is better than implicit“ würde ich erst einmal sagen, alle Module explizit importieren und in eine Liste stecken. Dann kann man über eine Nummer darauf zugreifen und sich dann das Objekt von dem jeweiligen Modul geben lassen: \sourceon python import module_a import module_b import module_c import module_d import module_e import module_f import module_g import module_h import module_i import module_j MODULES = [ module_a, module_b, module_c, module_d, module_e, module_f, module_g, module_h, module_i, module_j, ] def get_object(number): return MODULES[number].an_object \sourceoff Wobei dieses Beispiel davon ausgeht, dass alle Module sinnvolle Namen haben, also keine so regelmässigen wie in dem Beispiel jetzt, und dass das Objekt in jedem Modul gleich heisst. Sollte das Objekt in jedem Modul anders heissen dürfen, könnte man die Objekte in die Liste stecken. Warum gibt es denn die Indirektion von einer Nummer zu einem Modul/Objekt? Warum kann da statt der Nummer nicht gleich das Objekt übergeben werden. Nummerierte Namen sind, wie mein Vorredner ja schon sagte, ein „code smell“.


   Profil
Goswin hat die Antworten auf ihre/seine Frage gesehen.
Goswin hatte hier bereits selbst das Ok-Häkchen gesetzt.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2022 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]