Skip to main content
 首页 » 编程设计

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

2025年05月04日19bjzhanghao

例子:

import user 
 
class Thing(object): 
 
    def doSomething(self): 
 
        u = user.User(1) 
        print u.name 
 
>>  UnboundLocalError: local variable 'user' referenced before assignment 

但这行得通:

class Thing(object): 
 
    def doSomething(self): 
 
        import user 
        u = user.User(1) 
        print u.name 

感谢您的帮助!

编辑:

但这行得通:

import user as anothername 
 
class Thing(object): 
 
    def doSomething(self): 
 
        u = anothername.User(1) 
        print u.name 

请您参考如下方法:

您发布的代码缺少一些东西,因为它工作正常,如图所示。

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

import user 
 
class Thing(object): 
 
    def doSomething(self): 
        u = user.User(1) 
        print u.name 
        # ... 
        user = something 

问题是,通过分配给局部名称 user,你说 user 是该函数整个主体的局部变量 -- 甚至是作业前的代码。这意味着名称 user 确实不在该函数中引用您的模块,它引用局部变量。在为局部变量赋值之前尝试引用它会导致您看到的错误。

使用本地导入是可行的,因为导入的部分作用是赋值。即:import user 确保已导入“user”模块,并将该模块对象分配给名称 user。

简单的解决方法是将局部变量的名称更改为不会影响导入的名称。