Suppose this package which contains only one module:
mypackage/
__init__.py
mymodule.py
The __init__.py file is empty. The module mymodule.py is as follows:
from math import pi
def two_pi():
return 2 * pi
This is the content of mymodule:
>>> from mypackage import mymodule
>>> dir(mymodule)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'pi', 'two_pi']
The object pi is present when I import the module, but I don't want it to be there.
How can I avoid pi from being present in mymodule?
I have tried defining __all__ = ['tow_pi'], however this only works when importing with from mypackage.mymodule import *.
CodePudding user response:
There is no way to hide pi from mymodule because it is simply part of the module's global namespace, an attribute of the module object.
A workaround is to import pi locally instead in mymodule.py:
def two_pi():
from math import pi
return 2 * pi
CodePudding user response:
I don't see why you would want to do that, since removing pi from mymodule will cause two_pi() not to work.
Anyhow, you can use del(mymodule.pi) to remove the object pi from mymodule.
You might want to pass pi as a parameter to the function, and of course you can do from mymodule import two_pi
CodePudding user response:
You may use two files like: two_pi.py and __two_pi_impl.py
__two_pi_impl.py:
from math import pi as __pi
def two_pi():
return 2 * __pi
two_pi.py:
import __two_pi_impl
two_pi = __two_pi_impl.two_pi
Then:
>>> import two_pi
>>> dir(two_pi)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__two_pi_impl', 'two_pi']
