预加载/全局Python中的某些类

时间:2018-11-16 02:02:46

标签: python-3.x

我在python项目中有一些模型(映射到数据库表)。我想在项目启动时让它们预加载,所以我不需要在每个文件中都这样做

from db.models.user import User

我试图将它们加载到 init .py文件中,但它们不可用。

1 个答案:

答案 0 :(得分:0)

TL; DR:您需要在每个文件中导入模型。


在Python中,每个模块(*.py文件)都有其自己的名称空间(全局变量集)。没有任何方法可以使用 truly 全局变量(或类,函数等),因为每个名称对于定义它的模块都是本地的。这是Python的故意功能;如果(例如)您可以在某个随机模块中重新定义range()函数并破坏其他所有人的代码,那将是非常糟糕的。

您可以将导入from db.models.user import User放在db/models/__init__.py中,但这将无法全局访问User。相反,它将为原始类(db.models.User)创建一个别名db.models.user.User,您仍然必须照常导入该别名。在其他地方导入模型时,这可以节省您的少量键入操作,并且是扁平化包的深层次结构的好方法,但是它不能使任何内容真正地成为全局的,因为您不能使事物成为全局的。