我很困惑目录名、文件名和类名是如何一起工作的。
这是我现在的状态
app.py
database/
client.py
staff.py
order.py
在 client.py 中,我有一个名为 client 的类,它充当数据库模型 (MVC)。与我的其他文件相同:staff.py 有一个名为 staff 的类,order.py 有一个 order。
然后在 app.py 中我做:
from database import client as model
c = model.client()
然后我就糊涂了。在理想世界中这就是我想要做的:
将我的数据库模型类保存在各自目录中的单独文件中。
像这样使用它们:
c = model.client()
o = model.order()
s = model.staff()
我能看到的唯一方法是将我所有的类放在一个名为 model.py 的文件中,并将其保存在根目录下。
我确定我在这里遗漏了一些非常基本的东西。
请您参考如下方法:
Python 有两种导入内容的基本方法。模块和包。
模块只是包含路径上的一个 python 文件:order.py
如果 order.py 定义了一个名为 foo 的类,那么可以通过以下方式访问该类:
import order
o = order.foo()
为了使用原始问题中的语法,您需要确保您的 model.py 文件具有以下属性:[client, staff, order]
但是,这通常意味着将它们放在一个文件中。这是您要避免的。
包是一个目录,里面有一个__init__.py。 init.py 初始化包(即它在第一次导入时运行),您可以在该目录中包含模块或子包。
model
__init__.py
client.py
staff.py
order.py
这样,要访问任何子模块,您只需说:
import model.client
但是,这只是导入模块。它没有导入模块的任何属性。因此,为了访问模块内的类,您需要指定它:
import model.client
o = model.client.clientclass()
这有点乏味,但组织得很好。
两全其美(性能不是什么大问题):
如果您在__init__.py中键入以下代码:
from .client import clientclass as client
from .staff import staffclass as staff
from .order import orderclass as order
那么你已经自动加载了所有的类,并且可以通过以下方式访问它们:
import model
c = model.client()
s = model.staff()
o = model.order()
最后,坚持使用非魔法的方式可能更简单:
import model.client
o = model.client.clientclass()
--加呼
