在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
。
有什么想法吗?
答案 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