什么可能是为什么无法从另一个类的函数中访问类的原因?

时间:2010-12-08 03:15:27

标签: python

我有2个班级:

import follow
class User(object):
    def __init__(self):
        pass

import user
class Follow(object):
    def doSomething(self):
        u = User()

>> f = Follow()
>> f.doSomething()
>> NameError: global name 'User' is not defined

这是否会导致问题,因为两个类互相导入?是否相当于一次导入?还有其他潜在原因吗?感谢。

5 个答案:

答案 0 :(得分:3)


u = user.User()

或者,或者:


from user import User
u = User()

答案 1 :(得分:1)

user.py

class User(object):
    def __init__(self):
        pass

follow.py

from user import User

class Follow(object):
    def doSomething(self):
        u = User()

答案 2 :(得分:1)

问题似乎是您要导入user然后访问User。使用user.User或(不那么好)from user import User

Python将模块视为命名空间,因此在模块的全局范围内定义的任何内容仅可用作导入它的其他命名空间中的模块的属性。 Python中没有真正的“全局范围”,就像其他语言一样。

from foo import bar语法允许将标识符直接带入其执行的任何范围,但稍后重新加载模块的尝试将不再更新该引用。还有跟踪标识符来源的问题。

此外,您实际上似乎并未在follow模块中使用user。这应该不是问题,但如果您实际使用它,那么您应该扩展您的示例以包括使用。模块如何相互导入可以确定这是否实际允许。

答案 3 :(得分:0)

您可以尝试使用

from user import *

(通常不推荐)

使用限定名称

创建User个对象:

...
u = user.User()

正确导入

from user import User
我猜,

在您的情况下不起作用,因为递归导入。

答案 4 :(得分:0)

无论如何总会出现问题。 如果这个理论问题那么好。 但如果这是一个实际的设计然后停止。以下是一个动作。它应该是用户类中的一个函数,以便进行任何操作。

class User(object):
     def __init__(self):
          print "bleh"
     def follow(self,otheruser)
          following.append(otheruser)

这更有意义。以下显然是从某个变量或直接从数据库中提取的列表。