如何避免我的代码用户必须键入冗余导入行?

时间:2014-05-16 20:36:04

标签: python import coding-style

所以我有一个名为“裤子”的项目,住在GitHub.com上。最初该项目是一个名为.py的{​​{1}}文件。

pants.py

用户可以按如下方式导入和使用它:

Pants/
    pants.py
    README.md

这些对我来说都很好。然后我读到如何构建包含单元测试的项目,并最初重新组织我的项目:

import pants
w = pants.World()

这个问题是虽然用户仍然可以导入相同的逻辑方式,但是没有Pants/ pants.py README.md test/ __init__.py test_world.py test_ant.py 模块/包!没问题,我想,我只需添加另一个pants.test文件:

__init__.py

但是现在进口感觉非常重复:

Pants/
    __init__.py
    pants.py
    README.md
    test/
        __init__.py
        test_world.py
        test_ant.py

感觉就像有更好的方法!现在,我的项目结构如下:

import Pants.pants
w = Pants.pants.World()

但是,用户面临的导入行同样重复:

Pants/
    README.md
    pants/
        __init__.py
        ants.py
        world.py
        solver.py
        test/
            __init__.py
            test_world.py
            test_ant.py

现在我知道你可以将这些东西别名为更短的等价物,例如import pants.world import pants.solver w = pants.world.World() s = pants.solver.Solver() ,但导入行本身仍然感觉重复。关于如何在保留适当的项目结构的同时避免这种重复的任何建议?如果我通过import pants.world.World as World将其安装到安装中,是否有任何改变?

2 个答案:

答案 0 :(得分:1)

要修复它,我保持我的包结构相同,并将以下行添加到pants/__init__.py

from .ant import Ant
from .world import World
from .solver import Solver

然后我可以将演示文件顶部的导入行更改为:

from pants import World
from pants import Solver

答案 1 :(得分:0)

而不是单独pants.py将该代码放在__init__.py中。然后当有人import pants时,它会加载__init__.py。 (我会避免使用大写的“Pants”,因为大写通常用于类名)

如果您的用户需要单独worldsolver,您也可以

from pants import world,solver
w = world.World()
s = solver.Solver()

如果他们想要你的包裹中的所有东西,他们可以做到

from pants import *