2011-08-28 18 views
0

我似乎無法在任何地方找到答案。bpython -i&命名空間

鑑於簡單的例子:

# 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確實存在 - 主函數本身也是如此。

無論如何,我可以將存在於該主函數中的任何對象放入當我放入該交互式提示時所在的命名空間中?或者還有什麼我應該做的?

回答

1

my_class_instance位於main的命名空間中,因此在main之外無法看到它。使用一個全球性的,而不是:當我想要的東西,從運行的主要功能回到

my_class_instance = None 

def main(): 
    global my_class_instance 

    my_class_instance = MyClass() 
0

另一個技巧我有時用的是回什麼,我需要在主要結束。

因此,舉例來說,如果我需要一個實例,並從頂層的主要功能其它一些變量一個可以這樣做:

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

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

如果你現在使用bpython -i腳本名稱,你將有打電話給你的腳本全局名稱空間中的變量'ret'和ret [0]具有您的類實例,ret [1]的編號爲4.