Le code que vous avez posté manque quelque chose, car il fonctionne très bien comme indiqué.
Je devine que votre code réel ressemble plus à ceci:
import user
class Thing(object):
def doSomething(self):
u = user.User(1)
print u.name
# ...
user = something
Le problème est que, en attribuant au nom local user
vous avez dit que user
est une variable locale pour le corps entier de cette fonction - même le code avant l'affectation. Cela signifie que le nom user
fait et non fait référence à votre module dans cette fonction, il se réfère à une variable locale. Essayer de référencer une variable locale avant qu'une valeur lui soit affectée entraîne l'erreur que vous voyez.
L'utilisation d'une importation locale fonctionne car une partie de l'importation correspond à l'affectation. Par exemple: import user
s'assure que le module "utilisateur" a été importé et affecte cet objet module au nom user
. La solution simple est de changer le nom de votre variable locale en quelque chose qui ne fait pas d'ombre à votre importation.
duplication possible de [style de codage d'importation python] (http://stackoverflow.com/questions/477096/python-import-coding-style) –