python - Python 最佳实践:如何给模块起别名
问题描述
我正在使用一个包含pkg
submodule的包module_with_long_name
。这个模块是由 导入的pkg
,所以我可以module_with_long_name
在不显式导入的情况下使用它:
import pkg
pkg.do_stuff()
pkg.module_with_long_name.do_other_stuff()
但是我想给这个模块起别名,因为它的名称很长,而且我找不到任何 PEP 约定来说明以下两个中的哪一个是最佳实践:
import pkg
# First way
from pkg import module_with_long_name as module
# Second way
module = pkg.module_with_long_name
你知道关于这个问题的任何参考吗?
解决方案
我建议始终使用以下表格:
import package_name.subpackage_name.module_name as pkg_mod_abbrev
wherepkg_mod_abbrev
是适用于当前模块的缩写。这种方法:
以相同的方式对齐所有
import
语句,与它们是否重命名导入的项无关(即它们是否包含关键字as
)。这提高了可读性。保持导入路径连续。这更具可读性。写入
from package_name.subpackage_name import module_name as pkg_mod_abbrev
将模块名称与导入路径的另一部分分开。这需要跳过在import
导入路径的第一部分和模块名称之间出现的关键字。阅读这将需要更多时间。鼓励:
- 使用模块内的完整导入路径(即,
package_name.subpackage_name.module_name
),或 - 创建一个适合当前模块的缩写(即
pkg_mod_abbrev
)
从而避免使用
module_name
(写作import package_name.subpackage_name.module_name as module_name
仍然是可能的,但编写as
重命名本身可能会提示选择合适的缩写;而from
...import
将module_name
在没有别名的情况下定义 usingas
)。- 使用模块内的完整导入路径(即,
隐藏导入的模块_pkg_mod_abbrev
很有用,尤其是在模块名称与便于用于变量的名称一致的情况下(也是此 PEP 8 部分)。
例如,bdd
缩写为“二元决策图”。该包dd
有一个名为bdd
. bdd
命名作为类实例的 Python 变量很方便dd.bdd.BDD
。尽管如此,将模块命名为“bdd”也很方便dd.bdd
。隐藏导入的模块可以同时启用,这也改善了内省:
import dd.bdd as _bdd
def _main():
bdd = _bdd.BDD()
if __name__ == '__main__':
_main()
通过PEP 8,导入的名称是实现细节。因此,即使未隐藏,它们也不是模块 API 的一部分。
推荐阅读
- bash - 有效编码以计算文件中的大写字符
- bulma - 使用 Bulma CSS 将两个输入并排放置在表单中的最佳方法是什么?
- java - 有没有办法在不设置 onDataChange 事件的情况下使用 java admin sdk 查询 firebase?
- ajax - 我的 Ajax 调用将一个空字符串化对象传递给我的 JSonResult 操作,为什么?
- python-3.x - 无法使用 python3 selenium 找到元素
- jquery - 在 Google 搜索结果中交换网站标题和链接 URL
- python - 如何防止哨兵值与输入冲突?
- python - 用随机二进制密钥解密二进制序列。我的脚本有什么问题?
- javascript - 当某些选择复选框不存在时如何禁用下拉项
- node.js - 在 package.json devDependencies 和 peerDependencies 中重复相同的依赖项?