![](/img/trans.png)
[英]How to fix ModuleNotFoundError: No module named 'nest' when importing nest in Python?
[英]How to exclude objects when importing a python module
假設這個 package 只包含一個模塊:
mypackage/
__init__.py
mymodule.py
__init__.py
文件是空的。 模塊mymodule.py
如下:
from math import pi
def two_pi():
return 2 * pi
這是mymodule
的內容:
>>> from mypackage import mymodule
>>> dir(mymodule)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'pi', 'two_pi']
導入模塊時 object pi
存在,但我不希望它存在。
如何避免pi
出現在mymodule
中?
我嘗試定義__all__ = ['tow_pi']
,但這僅在使用from mypackage.mymodule import *
時有效。
無法從mymodule
中隱藏pi
,因為它只是模塊全局命名空間的一部分,是模塊 object 的一個屬性。
解決方法是在本地導入pi
而不是在mymodule.py
中:
def two_pi():
from math import pi
return 2 * pi
我不明白你為什么要這樣做,因為從mymodule
中刪除pi
會導致two_pi()
不起作用。 無論如何,您可以使用del(mymodule.pi)
從mymodule
中刪除 object pi
。
你可能想將pi
作為參數傳遞給 function,當然你可以from mymodule import two_pi
您可以使用兩個文件,例如:two_pi.py 和 __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
然后:
>>> import two_pi
>>> dir(two_pi)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__two_pi_impl', 'two_pi']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.