So importieren Sie jetzt now () vom Submodul datetime.datetime

8

Hintergrund: Ich habe ein paar enge Schleifen in einem Python-Programm, die wiederholt aufgerufen werden. Dazu gehören die datetime.datetime.now() -Methode sowie die datetime.datetime.min - und datetime.datetime.max -Attribute. Für die Optimierung möchte ich sie in den lokalen Namespace importieren, um die wiederholte Suche nach unnötigen Modulhierarchien wie folgt zu vermeiden:

%Vor%

Python beschwert sich jedoch:

%Vor%

Frage: Warum funktioniert der obige Submodul-Import nicht?

Workaround: Ich kann das stattdessen tun:

%Vor%

Aber ich bin neugierig, warum der traditionellere Ansatz nicht funktioniert? Warum kann ich Methoden und Eigenschaften nicht direkt aus dem datetime.dateime Submodul importieren? ... Und gibt es irgendeinen Grund, die obige Problemumgehung zu vermeiden (abgesehen von Lesbarkeit, Überlisten von mir selbst, etc.)?

Danke!

    
Trevor 15.12.2014, 19:19
quelle

1 Antwort

10

datetime.datetime ist kein Submodul. datetime ist eine Klasse im Modul datetime . now ist eine Methode dieser Klasse. Sie können from...import... nicht zum Importieren einzelner Methoden einer Klasse verwenden. Sie können damit nur einzelne Module aus einem Paket oder einzelne Objekte, die auf der obersten Ebene eines Moduls vorhanden sind, importieren.

Was Ihre Problemumgehung anbelangt, so finde ich es für Sie einfacher, dies zu tun:

%Vor%

Wenn Sie diese Methoden wirklich direkt in lokale Variablen einfügen möchten, ist Ihre Problemumgehung sinnvoll.

    
BrenBarn 15.12.2014, 19:24
quelle