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

メイン関数の実行から何かを戻したい場合に時々使用するもう 1 つのトリックは、メインの最後に必要なものを返すことです。

したがって、たとえば、トップレベルのメイン関数からインスタンスとその他の変数が必要な場合は、次のようにすることができます。

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 に答える