簡體   English   中英

導入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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM