编写和导入自定义模块/类

时间:2012-10-03 16:53:02

标签: python python-2.6

我有一个我正在尝试编写的类,名为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):自己解决了这个问题,构造函数必须能够获取至少一个参数 - 对自身的引用。简单的修复。看起来这个问题已经解决了!

编辑(最终):这很好 - 我可以删除import sys和sys.path.append行,它仍然适用于此实例。可爱。

1 个答案:

答案 0 :(得分:1)

您需要从模块中导入类:

from obj.dbObject import dbObject

这会将类dbObject直接添加到您的本地命名空间。

您的语句import obj.dbObject将名称obj添加到本地命名空间,因此您也可以这样做:

db = obj.dbObject.dbObject()

因为obj.dbObjectdbObject.py包目录中的obj模块。