Python submodule imports using __init__.py

后端 未结 3 1115
心在旅途
心在旅途 2020-12-09 16:33

I\'m learning Python, and I can\'t figure out how imports in __init__.py work.

I understand from the Python tutorial that the __init__.py f

3条回答
  •  死守一世寂寞
    2020-12-09 17:04

    First, you have to understand how import alone work:

    import test.submodule.do_something
    

    Would try to load do_something from submodule itself loaded from test.

    You want to load something from subpackage, so start with that:

    import subpackage
    

    Fine, subpackage/__init__.py is loaded.

    Now, you want the do_something() function which is in the file (a "module") hello_world.py. Easy:

    from subpackage.hello_world import do_something
    

    And you are done! Just read this line loud, it does exactly what it says: import do_something from the module hello_world which is in the subpackage package.

    Try that in test.py

    from subpackage.hello_world import do_something
    
    do_something()
    

    It should work just fine.

    Now, the second issue:

    __init__.py won't be called in package/ since you don't use package/ as a package. __init__.py will be used if you do an import of package/ or anything in it, for eg:

    from package import test
    

    Otherwise, it won't be loaded at all.

    However, if you want to load do_something() on the import of subpackage, put from submodule.hello_word import do_something in subpackage/__init__.py, and then, in you test.py, do a import subpackage.

提交回复
热议问题