0

我似乎无法在任何地方找到这个答案。

给出一个简单的例子:

# myclass.py
class MyClass:
    def __init__(self):
        print 'test'

def main():
    my_class_instance = MyClass()

if __name__ == '__main__':
    main()

some_var = 'i exist!  ... but I think I'm in global namespace?'

如果我运行 bpython -i myclass.py,我会执行程序并进入 bpython 环境。无论我在哪个名称空间中 - my_class_instance 都不存在。但是, some_var 确实存在 - main 函数本身也是如此。

无论如何,当我进入该交互式提示时,我是否可以将该主函数中存在的任何对象拉入我所在的命名空间?或者还有什么我应该做的吗?

4

3 回答 3

1

my_class_instance位于main的命名空间中,因此您无法在 . 之外看到它main。改用全局变量:

my_class_instance = None

def main():
    global my_class_instance

    my_class_instance = MyClass()
于 2011-08-28T20:49:17.150 回答
0

当我想从运行 main 函数中返回一些东西时,我有时会使用的另一个技巧是在 main 结束时返回我需要的东西。

因此,例如,如果我需要顶层主函数中的一个实例和一些其他变量,可以这样做:

def main():
    myclass = MyClass()
    a = 4
    return (my class, a)

if __name__ == '__main__':
    ret = main()

如果您现在使用 bpython -i scriptname 调用您的脚本,您将在全局命名空间中拥有变量“ret”,并且 ret[0] 拥有您的类实例,ret[1] 拥有数字 4。

于 2012-03-14T13:05:53.627 回答
0

在 python 2.7 上使用交互式 bpython,__name__等于__console__. 所以你的函数main()可能永远不会被调用。一个技巧是写:

# myclass.py
class MyClass:
    def __init__(self):
        print 'test'

def main():
    global my_class_instance
    my_class_instance = MyClass()

if __name__ in ('__main__', '__console__'):
    main()
于 2018-05-24T14:49:27.193 回答