2009-02-18 33 views
2

我很困惑目錄名,文件名和類名如何一起工作。python MySQL模塊類文件名

這是我目前所面對的

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一個單一的文件,並保存在這個根。

我確定我在這裏錯過了一些非常基本的東西。

+0

所以我是正確的,你的問題是,你在一個名爲X的文件中有一個名爲X的類,而在一個名爲Y的文件中有所有這些文件,並且你想簡單地說YX()(並且因此保存一個X)。 – MrTopf 2009-02-18 16:33:54

+0

我不知道 - 我沒有X或Y;) – 2009-02-18 16:48:48

回答

4

Python有兩種導入內容的基本方法。模塊和軟件包。


模塊僅僅是包括路徑上的Python文件:order.py

如果order.py定義了一個名爲類,然後訪問的那類可以通過了:

import order 
o = order.foo() 

爲了使用語法從orignial問題,你需要確保你的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() 

--Gahooa