Kürzlich hatte ich ein Problem, bei dem ein Signal, das ich von Flasch-Security verwendet habe, verhält sich nicht wie erwartet in Python 3.3. Bei der Betrachtung des Quellcodes für die Flasch-Sicherheit habe ich festgestellt, dass das Signal, das ich von einem Modul in das Paket-Sicherheitspaket importierte, auch in __init__.py
importiert wurde. Durch das Importieren des Signals von der obersten Ebene des Pakets konnte ich mein Problem lösen (da das Signal importiert wird, wenn das Paket initialisiert wird).
Wenn ich den folgenden Code ausführen:
%Vor% Ich bekomme True
in Python 2.7 und ich bekomme False
für python 3.3 +.
Was ist anders in Python 3.3+, das diesen Unterschied im Importverhalten verursacht?
BEARBEITEN:
Ich bin immer noch von der Python 2.7 vs 3.3 + Problem, aber haben es geschafft, einzugrenzen, dass das Problem auftritt, wenn die __init__.py
von flask.ext wird aufgerufen und verwendet die ExtensionImporter-Klasse von exhook.py , um die Flasch-Sicherheit zu importieren.
Wenn Sie unter python 3.4 Folgendes ausführen, wird True
zurückgegeben, wenn die flask-security direkt importiert wird und der Erweiterungs-Hook vermieden wird:
Hier ist repr () für Signale für flask.ext.security und flask_security Beispiele:
%Vor%Es gibt mehrere Fälle, in denen Python entscheiden kann, eine neue Instanz eines Objekts zu erstellen, wenn Sie das Modul erneut importieren.
Tatsächlich ist Python 3 nicht spezifisch und kann in verschiedenen Szenarien vorkommen.
Hauptsächlich müssen Sie davon ausgehen, dass die beiden Objekte unterschiedlich sein können und umgehen.
Tags und Links python python-import python-3.x flask flask-security