我似乎到处都找不到这个答案。
给出这个简单的例子:
# 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函数本身也存在。
当我进入交互式提示符时,是否可以将main函数中存在的任何对象拉到我所在的名称空间中?或者还有什么我应该做的吗?
发布于 2011-08-29 04:49:17
my_class_instance位于main的名称空间中,因此您无法在main之外看到它。请改用全局变量:
my_class_instance = None
def main():
global my_class_instance
my_class_instance = MyClass()发布于 2012-03-14 21:05:54
我有时使用的另一个技巧是在main函数的末尾返回我需要的东西。
例如,如果我需要一个实例和来自顶层main函数的一些其他变量,可以这样做:
def main():
myclass = MyClass()
a = 4
return (my class, a)
if __name__ == '__main__':
ret = main()如果你现在用bpython -i脚本名调用你的脚本,你会在全局命名空间中有变量' ret‘,ret有你的类实例,ret1的数字是4。
发布于 2018-05-24 22:49:27
在Python2.7上使用交互式bpython,__name__等同于__console__。因此,您的函数main()可能永远不会被调用。一个hack是这样写的:
# 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()https://stackoverflow.com/questions/7223829
复制相似问题