Python使导入语句独立于确切位置

时间:2018-11-02 10:12:16

标签: python import

Python中使代码独立于其所在位置的最佳方法是什么?

在我的一个项目中,我有很多代码(位于不同的文件中),所有这些代码都需要访问在其他地方定义和创建的相同对象。

在一个完美的世界中:

somewhere.py

from registry import register
...
register(Cat(), "cat")
...

somewhere_else.py

from magic import cat
...
cat.pet()
...

但是,这很可能涉及重写导入系统,因此,我也对模拟该系统的任何实现感到满意。 magic.get('cat')而不是from magic import cat

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将您的项目分成子包并将其导入__init__.py中可以解决您的问题(如果我正确理解的话)。例如:

如果您的项目的结构如下:

root
├── animals
│   ├── cat.py
│   ├── dog.py
│   └── __init__.py
└── main.py

您可以拥有:

cat.py:

class Cat:
    pass

dog.py:

class Dog:
    pass

__ init __。py

from .cat import Cat
from .dog import Dog

main.py

from animals import Dog, Cat  # we don't specify exact modules, just a sub-package name
# do stuff with these animals