构建Python OOP代码和模块

时间:2013-02-15 23:11:41

标签: python module packages

packageName\
    __init__.py
    src\
        __init__.py
        someFile.py
        classes\
            __init__.py
            engine1.py
            engine2.py
            engine.py
    tests\
        __init__.py
        myTests.py
    temp\

我正在使用Python进行OOP,我有几个问题。

我知道__init__.py将文件夹定义为模块,但我不明白这对我有什么好处。

如果需要从myTests.py文件夹导入类,我将如何运行packageName/src/classes

$  python packageName/tests/myTests.py

上面的调用是我猜我打算运行我的测试。如果是结构,我该如何导入类?

from ..src.classes.engine1 import *

1 个答案:

答案 0 :(得分:0)

正如@Mike所提到的,The Hitchhiker的包装指南将是一个很好的起点。

现在,就你的测试而言:出于各种原因,你不能只运行python packageName/tests/myTests.py(具体来说,Python会对包布局感到困惑 - 当你使用python foo.py运行文件时,它应该在一个包之外,因此from ..src …行将因Attempted relative import in non-package}而失败。

相反,您需要从外部开始测试...使用noseunittest2之类的测试运行器,或者在顶层编写一个简单的脚本目录(即packageName/上方):

$ ls
packageName/ run_tests
$ cat run_tests.py
from packageName.tests.myTests import main
main()

然后在main()中添加myTests()函数。

然而,使用测试运行器要简单得多。如果您written your tests correctly,则可以使用以下命令运行它们:

$ ls
packageName/
$ nosetests
..................................
----------------------------------------------------------------------
Ran 34 tests in 1.440s

OK