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: in der letzten Woche
Dabei seit: 18.09.2008
Mitteilungen: 1648
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: 211
  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
Folgende Antworten hat der Fragesteller vermutlich noch nicht gesehen.
__blackjack__
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.09.2021
Mitteilungen: 27
  Beitrag No.2, eingetragen 2021-09-24 04:29

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

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-2021 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]