我有一个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()
我做错了什么?
答案 0 :(得分:2)
您不能这样做,因为f
位于不同的名称空间中。
您需要传递wow
个joj
实例的实例。为此,我们首先以相反的方式创建它们,因此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 " !!!!! "
将每个类和函数视为一个全新的开始,您在其他地方定义的变量都不属于它们。