类似类的通用import语句

时间:2015-05-20 22:59:27

标签: python

在我的应用中,我有一个model文件夹/包。

在该模型文件夹中,我通常有一大堆import语句(大多数来自SQLAlchemy,例如String, Integer, Session等。

我发现自己一次又一次地为User, Blog, Article, Etc.这样的东西编写相同的导入语句,并且变得非常草率。

了解显性优于隐式,然后继续并且忽略它,有没有办法做到这一次?

2 个答案:

答案 0 :(得分:4)

这可能不是你想要的,但谁知道

common_imports.py

 from sqlalchemy import Model,String,...

在其他脚本中只需

from common_imports import *

[编辑] 实际上我想出了一个非常糟糕和黑客的方式来做你想做的事

一种真正的hacky方式可能就像

\root_of_package
    -main.py
    \models
       -__init__.py
       -model1.py
       -model2.py

然后在models\__init__.py

from sqlalchemy import String,Integer,...
from glob import glob
Base = ...
for fname in glob("%s/*.py"%dirname(__file__)):
    with open(fname) as f:
        eval(f.read())
__all__ = locals()

然后在models/model1.py

#just use all the imports/locals from __init__.py as if they already existed
#this will be hellish if you use an IDE that checks for errors for you
class Model1(Base):
      id = Column(Integer,primary_key=True)
      ...

然后在main.py

from models import Model1

答案 1 :(得分:4)

我在我的一个应用程序中执行此操作。

# approot/m.py

from models.model import String, Integer, Session, (etc)

# Otherwise blank!

然后在其他一切:

import m

然后你可以m.Stringm.Integerm.Session等等。这也意味着我可以进一步封装我的代码,以便以后当我编写用户模型时我可以添加到m.py

from models.user import User, Group, PermissionSet

并继续访问m.Userm.Group