Python组织小项目/脚本

时间:2013-05-31 21:33:42

标签: python

我是python的新手,我不确定一些事情。

  1. 类应该在单个文件中吗?
  2. 独立脚本是否有主方法?如果是这样,这是如何工作的,因为我有一个主要的方法,不会被称为
  3. 单元测试目录通常放在哪里以及它如何“包含”它正在测试的文件?

3 个答案:

答案 0 :(得分:5)

这里有很多理由,你可以通过将这些点分成单个问题/查询来提供更好的服务:)

  1. 我反对不必要地将类拆分成单个文件。有些类可能在很大程度上依赖于其他类,我(个人)喜欢将它们保存在同一个文件中。我认为最好的约定是基于功能创建文件,而不是为每个类创建单独的文件。

    我从像Flask和Jinja2这样的Pocoo项目中获得了很多灵感。 Jinja2源提供了一个在文件中“捆绑”某些相关类的优秀示例:Github

  2. 独立脚本通常使用if __name__ == '__main__'之类的东西来检查是否直接执行(例如python scriptname.py),然后通常main()执行一个函数(感谢Mike纠正我的错)。

    为了更好地帮助您解决main未被调用的问题,我建议您展示您尝试使用的代码。

  3. 有许多不同的方法可以执行此操作,但约定似乎位于项目内的teststesttestsuite目录中。这个问题的后半部分变得非常棘手,因为Python导入的变化取决于Python项目的结构/类型(它是一个Python包吗?一个独立的脚本集合?)和你的PYTHONPATH

    This关于考虑在哪里进行测试,SO帖子是一个很好的起点,尽管一般的答案似乎是“对你/你的团队最好的地方”:)。

    在一个稍微相关的说明中,我还建议调查Nose测试框架,因为它删除了许多用Python测试的样板。

答案 1 :(得分:2)

我将回答问题1和2。

1)这取决于。如果您的类很小,那么可以将它们放在同一个文件中。如果它们变大,它们通常被保存在单独的文件中 2)不,不需要主要方法。但是,对于一个脚本,这是一个强大的常见习语:

def main():
    # Your code

# At the bottom of the file
if __name__ == '__main__':
    main()

这样,只有当文件作为脚本运行时,main才会运行,但作为模块导入时,它不会运行。 Python只会在导入模块时执行它在函数中遇到的任何代码,因此如果您希望稍后将脚本重用为模块,这将保护您。

这只是一个成语,main在python中没有特殊含义,所以你不必调用它或任何东西。

答案 2 :(得分:0)

  1. 不必,但如果该类被其他几个文件/类使用,那么它应该。
  2. 这是一个很好的做法,请参阅What does <if __name__==“__main__”:> do?
  3. Python查看$ PYTHONPATH,它是一个用于查找模块的目录列表。您可以将模块放在其中一个目录的子目录中,并使用import directoryname.module.导入它们。您可以按from directoryname.module import ClassName
  4. 导入课程