【问题标题】:Do not see module imports at top level of Python package在 Python 包的顶层看不到模块导入
【发布时间】:2017-04-10 13:58:29
【问题描述】:

考虑以下python 包结构

 working_directory/
-- test_run.py
-- mypackge/
---- __init__.py
---- file1.py
---- file2.py

file1.py 里面说我定义了一个函数func1(),我还从numpy 导入了一些函数,比如from numpy import array。现在我想从test_run.py 导入和使用mypackage 而不在命名空间中看到这些numpy 函数。我想使用import mypackage as mp 导入它并查看

mp.file1.func1()
mp.file2.func2()
etc

我不想看到mp.file1.array()。我该怎么做?

【问题讨论】:

  • 你不能不删除它,但是file1中的功能将无法访问它。我有一种感觉,这是一个 XY 问题。为什么要这样做?
  • 你不能直接这样做。如果您想如此密切地管理命名空间,您将需要一个位于file1 的存根文件,它只从file1x 导入您需要的东西,其中filex 是您当前的文件1,已重命名。
  • 如果你不想看到mp.file1.array(),正确的解决办法是一开始就不去找。
  • 好吧,我想从“mypackage”中以有组织的形式提供我的功能,如果我需要使用一些软件来实现它们,我不希望从外部访问它,因为它是不必要的......这是错的吗?
  • 原则上你没有错。但是我认为这是一场不值得战斗的战斗......您可以考虑使用import numpy as npnp.array 来尽可能干净。另外,您不希望用户只查找您在文档中解释的功能吗?

标签: python


【解决方案1】:

一种可能是使用下划线:

from numpy import array as _array.

虽然这并不禁止人们访问mp.file1._array,但一般认为以下划线开头的变量是“私有的”。

AFAIK,没有简单的方法可以禁止访问 python 中的任何变量。 (一种方法是使其成为类的属性,请参阅:https://docs.python.org/3/library/functions.html#property

【讨论】:

    猜你喜欢
    • 2021-02-05
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2020-03-16
    • 2021-01-17
    相关资源
    最近更新 更多