0

我有一个 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()

我究竟做错了什么?

4

1 回答 1

2

你不能这样做,就像f在不同的命名空间中一样。

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

from new import *

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

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

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 " !!!!! "

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

于 2012-04-10T00:01:02.497 回答