全局初始化python类?

时间:2011-10-19 21:57:42

标签: python class initialization

我有两个文件,其中一个是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.这不可能吗?

3 个答案:

答案 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)

oneif __name__=='__main__'块中定义。 因此,仅当one作为脚本(而不是导入)运行时才会定义test.py

要使模块new能够从one模块访问test,您需要将oneif __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()