python MySQL模块类文件名
我不知道目录名、文件名和类名是如何一起工作的 这就是我现在所拥有的python MySQL模块类文件名,python,file,class,directory,module,Python,File,Class,Directory,Module,我不知道目录名、文件名和类名是如何一起工作的 这就是我现在所拥有的 app.py 数据库/ client.py staff.py order.py 在client.py中,我有一个名为client的类,它充当数据库模型(MVC)。与我的其他文件相同:staff.py有一个名为staff,order.py有order 然后在app.py中执行以下操作: 从数据库导入客户端作为模型 c=model.client() 然后我就糊涂了。在理想的世界里,这就是我想做的事: from .client i
app.py
数据库/
client.py
staff.py
order.py
在client.py
中,我有一个名为client
的类,它充当数据库模型(MVC)。与我的其他文件相同:staff.py
有一个名为staff
,order.py
有order
然后在app.py中执行以下操作:
从数据库导入客户端作为模型
c=model.client()
然后我就糊涂了。在理想的世界里,这就是我想做的事:
from .client import clientclass as client
from .staff import staffclass as staff
from .order import orderclass as order
model
__init__.py
client.py
staff.py
order.py
c=model.client()
o=模型。订单()
s=model.staff()
我能看到的唯一方法是将所有类放在一个名为model.py
的文件中,并将其保存在根目录下
我确信我在这里遗漏了一些非常基本的东西。Python有两种导入内容的基本方法。模块和包
模块只是包含路径上的python文件:order.py 如果order.py定义了一个名为foo的类,那么可以通过以下方式访问该类:
import order
o = order.foo()
为了使用原始问题的语法,您需要确保model.py文件具有以下属性:[客户、员工、订单]
但是,这通常意味着将它们放在单个文件中。这就是你想要避免的
包是一个目录,其内部有一个\uuuu init\uuuuuuuuuuuupy。init.py初始化包(即,它在第一次导入时运行),您可以在该目录中拥有模块或子包
model
__init__.py
client.py
staff.py
order.py
这样,要访问任何子模块,您只需说:
import model.client
但是,这只是导入模块。它不导入模块的任何属性。因此,为了访问模块内的类,您需要指定它:
import model.client
o = model.client.clientclass()
这有点乏味,但组织得很好
两者兼而有之(性能不是什么大问题): 如果在\uuuu init\uuuuu.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那么我说得对吗?你的问题是,你在一个名为X的文件中有一个名为X的类,所有这些文件都在一个名为Y的包中,你只想说Y.X()(这样就不用提X了)?我不知道-我既没有X也没有Y;)另一个问题:详细方式[o=model.client.clientclass()]是否会将实现细节泄漏到代码中?比如说,在重构过程中,您决定将一个类(例如clientclass)移动到它自己的文件中,您需要更改创建新clientclass的数百行代码。(我的chars用完了…)@monk.e.boy:性能降低,因为即使您只需要一个文件,也会导入所有文件。如果它是一个长时间运行的进程,或者是一个简单的程序,那么没有问题。但是如果要大量加载,可能会产生影响。@monk.e.boy:实现细节(IMO)应该在类级别,而不是模块级别。换句话说,实现者应该在某个时候知道公共类名。