我有一个包含多个文件的文件夹,其中包含许多不同的类。这些文件都可以放在一个大文件中,但是为了使它更容易阅读,我根据类所属的类将其拆分为多个文件。
我想将文件夹中所有文件中的所有类导入到__init__
文件中,这样我就可以从文件夹中导入任何内容,而不知道它属于哪个文件。
示例:
/kitchen
+ __init__.py
+ fridge.py
+ stove.py
+ cupboard.py
现在我必须做
from kitchen.fridge import milk
当我想做的时候
from kitchen import milk
相当于我可以通过__init__.py
做的事情:
from kitchen.fridge import *
from kitchen.stove import *
from kitchen.cupboard import *
然后我就可以
from kitchen import milk
但我希望它不必显式地指定文件夹中的所有文件(以便文件可以转储到那里然后使用)。
有办法吗?
这是个很坏的主意。如果你想添加一个机制,让文件被“转储到那里并使用”,你可能需要想出一个插件方案,并显式地搜索插件目录。
通常的方法是使用
os.listdir
或os.walk
迭代一个或多个插件目录,然后,对于每个Python文件,使用importlib
(或Python 2.x中imp
的较低级别等价物)按路径导入它。但是,如果您真的坚持要在包中以这种方式伪造东西,那么您可以在
__init__.py
文件中使用os.path.dirname(__file__)
作为插件目录执行基本相同的技巧。而且,如果您真的坚持使用
from foo import *
而不是import foo
的路径,那么这同样简单,或者,您也可以使用execfile
。如果你不知道如何做这些简单的事情,或者不知道如何在文档中查找它们…那么你绝对不应该尝试这样做。所以,在这种情况下,我不会提供示例代码。
显式比隐式好。别这样。你当然可以把一些东西组合在一起,在某种程度上实现自动导入。但这真的不值得。在
__init__.py
中,每添加一个文件只需多出一行,就完成了。简单的解决方案更好,除非你从更复杂的解决方案中得到很多,这里肯定不是这样。相关问题 更多 >
编程相关推荐