我很困惑目录名、文件名和类名如何一起工作。
这就是我现在所拥有的
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 文件具有以下属性:[客户、员工、订单]
但是,这通常意味着将它们放在一个文件中。这正是您想要避免的。
包是一个内部有__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()
--Gahooa
关于python MySQL 模块类文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/561791/