How To Use __init__.py In (sub-)modules To Define Namespaces?
Solution 1:
Is this a good python-like way to define namespaces? Or is there a better / common way to organize the file-system of a package in python. (I did not find a proper tutorial/example for this.)
This is an okay way to setup a Python package. Only okay and not 'good' because of the contents of foo.py and bar.py.
I don't like to use
package.foo.foo()/package.subpackage.bar.bar()and would like to usepackage.foo()/package.subpackage.bar().
In this case, you can't. And not mixing the name spaces is good reason to not do from package.subpackage.bar import bar.
It would have been better if def foo(): ... and def bar(): ... were directly in __init__.py. That way, you could have done package.foo() and package.subpackage.bar(). It could also have been done by using __all__ in init but import * is also not considered good.
Or, the foo and bar packages should have had more in it like foo.function1, foo.other_func, bar.drink, etc. which gives it more human-friendly understandable organisation.
Examples and references are not within scope for good StackOverflow questions but here are some, for a well thought-out question:
Solution 2:
The answer to the second question:
In file
package/subpackage/__init__.py, why does it have to be:
from package.subpackage.bar import barand not:
from subpackage.bar import bar?
is that you have to use from .bar import bar. The dot is used when you want to do relative imports inside a package structure. See: https://docs.python.org/3/tutorial/modules.html#intra-package-references
Post a Comment for "How To Use __init__.py In (sub-)modules To Define Namespaces?"