我似乎无法在任何地方找到这个答案。
给出了一个简单的例子:
# 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确实存在 - 主函数本身也是如此。
无论如何,当我进入交互式提示时,我可以将该主函数中存在的任何对象拉入我所在的命名空间中吗?或者我还应该做些什么呢?
答案 0 :(得分:1)
my_class_instance
位于main
的命名空间中,因此您无法在main
之外看到它。使用全局代替:
my_class_instance = None
def main():
global my_class_instance
my_class_instance = MyClass()
答案 1 :(得分: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。
答案 2 :(得分: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()