除非直接从函数导入,否则为什么类不可见的原因可能是什么?

ens*_*are 1 python

例:

import user

class Thing(object):

    def doSomething(self):

        u = user.User(1)
        print u.name

>>  UnboundLocalError: local variable 'user' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

但这有效:

class Thing(object):

    def doSomething(self):

        import user
        u = user.User(1)
        print u.name
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

编辑:

但这有效:

import user as anothername

class Thing(object):

    def doSomething(self):

        u = anothername.User(1)
        print u.name
Run Code Online (Sandbox Code Playgroud)

Lau*_*ves 6

您发布的代码缺少某些内容,因为它显示正常.

我猜你的真实代码看起来更像这样:

import user

class Thing(object):

    def doSomething(self):
        u = user.User(1)
        print u.name
        # ...
        user = something
Run Code Online (Sandbox Code Playgroud)

问题在于,通过分配本地名称,user您已经说过user该函数的整个主体的局部变量 - 甚至是赋值之前的代码.这意味着,名user请参阅您的模块在功能,它指的是一个局部变量.尝试在为其分配值之前引用局部变量会导致您看到的错误.

使用本地导入是有效的,因为导入的一部分是赋值.ie:import user确保已导入"user"模块,并将该模块对象分配给名称user.

简单的解决方法是将本地变量的名称更改为不会影响导入的内容.