在Python中导入/运行类会导致NameError

时间:2012-04-09 23:52:22

标签: python class import nameerror

我有一个python程序,我正在尝试导入其他python类,我得到一个NameError:

Traceback (most recent call last):
  File "run.py", line 3, in <module>
    f = wow('fgd')
NameError: name 'wow' is not defined

这是名为new.py的文件:

class wow(object):
    def __init__(self, start):
        self.start = start

    def go(self):
        print "test test test"
        f = raw_input("> ") 
        if f == "test":
            print "!!"  
            return c.vov()  
        else:
            print "nope"    
            return f.go()

class joj(object):
    def __init__(self, start):
        self.start = start
    def vov(self):
       print " !!!!! "

这是文件run.py

from new import *

f = wow('fgd')
c = joj('fds')
f.go()

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您不能这样做,因为f位于不同的名称空间中。

您需要传递wowjoj实例的实例。为此,我们首先以相反的方式创建它们,因此c存在以传递到f:

from new import *

c = joj('fds')
f = wow('fgd', c)
f.go()

然后我们将参数c添加到wow,将引用存储为self.c并使用self代替f作为f在此命名空间中不存在 - 您引用的对象现在是self:

class wow(object):
    def __init__(self, start, c):
        self.start = start
        self.c = c

    def go(self):
        print "test test test"
        f = raw_input("> ") 
        if f == "test":
            print "!!"  
            return self.c.vov()  
        else:
            print "nope"    
            return self.go()

class joj(object):
    def __init__(self, start):
        self.start = start
    def vov(self):
       print " !!!!! "

将每个类和函数视为一个全新的开始,您在其他地方定义的变量都不属于它们。