【问题标题】:Python best practice: how to alias a modulePython 最佳实践:如何给模块起别名
【发布时间】:2019-06-12 08:13:16
【问题描述】:

我正在使用一个包pkg,它有一个子模块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

你知道关于这个问题的任何参考吗?

【问题讨论】:

  • 当我们在代码中查找 module 的内容时,from ... 导入可能会更清晰,并且它与其他导入一样位于文件顶部
  • IMO 第一种方式更清晰,因为它总是将导入的模块与其别名定义放在一起。
  • 如果第二种方法是最佳实践,那么启用第一种方法的语法可能不存在 ;-)

标签: python python-import pep


【解决方案1】:

我建议始终使用以下表格:

import package_name.subpackage_name.module_name as pkg_mod_abbrev

其中pkg_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 将定义@987654338 @ 在没有别名的情况下使用 as)。

Hiding 导入的模块_pkg_mod_abbrev 很有用,尤其是在模块名称与便于用于变量的名称一致的情况下(还有this PEP 8 section)。

例如,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, imported names are an implementation detail。因此,即使未隐藏,它们也不是模块 API 的一部分。

【讨论】:

  • 两年后,我已经失去了在这里得到有用答案的希望。非常感谢您带来如此详细的内容!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
相关资源
最近更新 更多