2013-04-14 104 views
0

是否有可能只在一個位置包含庫/包?跨不同文件的相同導入

class Sample(db.Model): 
    randomText = db.StringProperty(multiline = True) 

-

from google.appengine.ext import db 
from project.models import Sample 
class SampleHandler(): 
    def get(self): 
    xamp = Sample.all() 

由於處理器已經從google.appengine.ext庫/包導入數據庫,然後導入模型,我會假設你沒有把它列入再次在模型本身。但是,看起來我必須以任何方式?

有人在乎解釋嗎?

回答

2

您需要導入使用模塊的地方

如果您的models模塊使用google.appengine.ext.db模塊,則需要將其導入到那裏,而不是在您的處理程序模塊中。

導入東西會在您的模塊命名空間中創建對'東西'的引用,以便在使用它時可以找到它的代碼。 db是您可以使用google.appengine.ext中定義的對象的本地名稱。

如果您的處理程序使用相同的對象,則需要導入它。如果通過導入models所有名稱突然使用models(如果您的處理程序模塊也可用),則最終會出現名稱衝突和難以調試的錯誤。

反之亦然,如果只在您的處理程序模塊中導入google.appengine.ext.db,而不是在您的models模塊中工作,則需要將給定模塊的所有依賴項與模塊本身一起導入。這很快就變得不可行,因爲您需要記錄您的模塊只需要使用它的所有內容。

+0

因此,如果在處理程序和模型中都使用了「db」,那麼我將不得不在兩者中導入它們?我無法將一個文件中使用的所有庫/包導入到所有文件中,然後只導入該文件?編輯,它是不是像:<? require_once('lib1.php'); require_once('lib2.php'); require_once('lib3.php'); ?><? require_once('libs.php'); ?> idea – KaekeaSchmear

+0

您可以創建一個導入所有內容的模塊,然後使用'from thatmodule import *'將所有內容導入到其他位置。 **這是一個壞主意**;你希望*明確地*關於你導入的內容,因爲它可以創建清晰的*關於你正在使用什麼以及從哪裏來的東西。 –

+0

因此,蟒蛇只是要求你導入你使用的任何腳本,無論是否導入其他腳本? – KaekeaSchmear

相關問題