我有两个文件,其中一个是test.py
import new.py
class Test:
def __init__(self):
return
def run(self):
return 1
if __name__ == "__main__":
one=Test()
one.run()
和new.py
class New:
def __init__(self):
one.run()
New()
现在当我运行python test.py时出现此错误,
Traceback (most recent call last):
File "test.py", line 1, in <module>
import new.py
File "/home/phanindra/Desktop/new.py", line 5, in <module>
New()
File "/home/phanindra/Desktop/new.py", line 3, in __init__
one.run()
NameError: global name 'one' is not defined
但是我想在我的新手中使用这个实例! 我可以这样做吗?
编辑:
我想在new.py中访问test.py中的变量来执行某个过程并将它们返回给test.py.这不可能吗?
答案 0 :(得分:5)
如果您希望New
类使用您创建的Test
实例,则必须将其作为构造函数的一部分传递。
new.py
class New:
def __init__(self, one):
one.run()
test.py
import new
class Test:
def __init__(self):
return
def run(self):
return 1
if __name__ == "__main__":
one=Test()
two = new.New(one);
使用全局变量是打破代码的好方法,却没有意识到你是如何做到的。最好明确传入您想要使用的引用。
答案 1 :(得分:0)
class New(object):
def __init__(self, one):
one.run()
答案 2 :(得分:-1)
one
在if __name__=='__main__'
块中定义。
因此,仅当one
作为脚本(而不是导入)运行时才会定义test.py
。
要使模块new
能够从one
模块访问test
,您需要将one
从if __name__
块中拉出来:
<强> test.py:强>
class Test:
def __init__(self):
return
def run(self):
return 1
one=Test()
if __name__ == "__main__":
one.run()
然后按限定名称one
test.one
<强> new.py:强>
import test
class New:
def __init__(self):
test.one.run()
New()