2012-10-03 87 views
0

我有一個我正在嘗試編寫的類叫做dbObject,我試圖從不同文件夾中的腳本導入它。我的結構如下:編寫和導入自定義模塊/類

/var/www/html/py/testobj.py 

/var/www/html/py/obj/dbObject.py 

/var/www/html/py/obj/__init__.py 

現在,__init__.py是一個空文件。以下是dbObject.py的內容:

class dbObject: 
     def __init__(): 
       print "Constructor?" 

     def test(): 
       print "Testing" 

和這裏的testobj.py的內容:

#!/usr/bin/python 
import sys 
sys.path.append("/var/www/html/py") 
import obj.dbObject 

db = dbObject() 

當我跑,我得到:

Traceback (most recent call last): 
    File "testobj.py", line 7, in <module> 
    db = dbObject() 
NameError: name 'dbObject' is not defined 

我Python新手,所以我很困惑我做錯了什麼。有人能指點我正確的方向嗎?

編輯:感謝的Martijn Pieters的回答我修改testobj.py如下:

#!/usr/bin/python 
import sys 
sys.path.append("/var/www/html/py") 
sys.path.append("/var/www/html/py/dev") 
from obj.dbObject import dbObject 

db = dbObject() 

但是,現在當我運行它,我得到這個錯誤:

Traceback (most recent call last): 
    File "testobj.py", line 7, in <module> 
    db = dbObject() 
TypeError: __init__() takes no arguments (1 given) 

難道這指我的init .py或dbObject中的構造函數?編輯(2):解決了一個我自己,構造函數必須至少能夠接受一個參數 - 對自身的引用。簡單的修復。看起來這個問題解決了!編輯(最後):這是很好 - 我可以切出導入系統和sys.path.append行,它仍然在這種情況下工作。可愛。

回答

1

你需要從模塊導入類:

from obj.dbObject import dbObject 

這直接增加了類dbObject到本地命名空間。

你的陳述import obj.dbObject添加名稱obj到本地命名空間,所以你也可以這樣做,而不是:

db = obj.dbObject.dbObject() 

因爲obj.dbObjectdbObject.py模塊在obj包目錄。

+0

如果您使用'from X import Y'語句,那麼您的代碼應該使用'Y'來引用導入的對象。 'obj.dbObject.dbObject()'會失敗並顯示錯誤消息'NameError:name'obj'is not defined' –