Python 最佳实践:如何为模块添加别名

问题描述 投票:0回答:1

我正在使用一个包

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

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

python python-import pep
1个回答
2
投票

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

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
    将在中定义
    module_name
    使用
    as
    不会产生锯齿。

隐藏导入的模块

_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 的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.