30
loading...
This website collects cookies to deliver better user experience
Your _init_.py files become some kind of "documentation" of which objects should be accessed or not from other modules.
You fully control your import system, which is a key to loose-coupling.
The final user (other developper using your module) experience is enhanced, import are short and clear.
project
│ __main__.py
└───demeter
│ │ __init__.py
│ └───module1
│ │ __init__.py
│ │ code1.py
# demeter/module1/code1.py
class MyClass1:
pass
# __main__.py
from demeter.module1.code1 import MyClass1
class1 = MyClass1()
# demeter/module1/__init__.py
from demeter.module1 import code1 as code1
MyClass1 = code1.MyClass1
# demeter/__init__.py
from demeter import module1
MyClass1 = module1.MyClass1
# __main__.py
from demeter import module1
MyClass1 = module1.MyClass1
project
│ __main__.py
└───demeter
│ │ __init__.py
│ └───module1
│ │ __init__.py
│ │ code1.py
| └───module2
│ │ __init__.py
│ │ code2.py
# demeter/module1/module2/code2.py
class MyClass2:
pass
# demeter/module1/module2/__init__.py
from demeter.module1.module2 import code2 as code2
MyClass2 = code2.MyClass2
# demeter/module1/__init__.py
from demeter.module1 import code1 as code1
from demeter.module1 import module2 as module2
MyClass1 = code1.MyClass1
MyClass2 = module2.MyClass2
# demeter/__init__.py
from demeter import module1
MyClass1 = module1.MyClass1
MyClass2 = module1.MyClass2
# __main__.py
from demeter import module1
MyClass1 = module1.MyClass1
MyClass2 = module1.MyClass2
# demeter/module1/code1.py
class MyClass1:
pass
# demeter/module1/module2/code2.py
class MyClass2:
pass
# demeter/module1/module2/__init__.py
from demeter.module1.module2 import code2 as code2
# demeter/module1/__init__.py
from demeter.module1 import code1 as code1
from demeter.module1 import module2 as module2
MyClass1 = code1.MyClass1
# demeter/__init__.py
from demeter import module1
MyClass1 = module1.MyClass1
# demeter/__main__.py
import demeter
module1 = demeter.module1
MyClass1 = module1.MyClass1
MyClass2 = module1.module2.code2.MyClass2