2

我很困惑目录名、文件名和类名是如何一起工作的。

这就是我目前所拥有的

  app.py
  database/
     client.py
     staff.py
     order.py

在里面client.py我有一个名为 的类client,它充当数据库模型(MVC)。我的其他文件也一样:staff.py有一个名为的类stafforder.pyorder

然后在app.py我做:

  from database import client as model
  c = model.client()

然后我就糊涂了。在一个理想的世界中,这就是我想要做的

  1. 将我的数据库模型类保存在它们自己目录中的单独文件中。

  2. 像这样使用它们:

  c = model.client()
  o = model.order()
  s = model.staff()

我能看到的唯一方法是将我的所有类放在一个名为的文件中model.py并将其保存在根目录中。

我确定我在这里遗漏了一些非常基本的东西。

4

1 回答 1

4

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()   

——嘎呼阿

于 2009-02-18T16:37:41.170 回答