3

我对python很陌生,对一些事情不确定。

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

3 回答 3

5

这里有很多基础,通过将这些点分成单独的问题/查询,您可能会得到更好的服务:)

  1. 我会拒绝不必要地将类拆分为单个文件。有些类可能严重依赖于其他类,我(个人)喜欢将它们放在同一个文件中。我觉得最好的约定是基于功能创建文件,而不是为每个类创建一个单独的文件。

    我从 Pocoo 项目(如 Flask 和 Jinja2)中获得了很多灵感。Jinja2 源提供了一个在文件中“捆绑”某些相关类的极好示例:Github

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

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

  3. 有许多不同的方法可以做到这一点,但约定似乎是在项目内的tests, test,testsuite目录中。这个问题的后半部分变得相当棘手,因为 Python 导入取决于您的 Python 项目的结构/类型(它是 Python 包吗?一个独立的脚本集合?)和您的PYTHONPATH.

    这个SO 帖子是一个很好的起点,可以考虑在哪里放置测试,尽管一般的答案似乎是“最适合你/你的团队的地方”:)。

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

于 2013-05-31T21:45:06.223 回答
2

我将回答问题 1 和 2。

1)这取决于。如果您的课程很小,则可以将它们放在同一个文件中。如果它们变大,它们通常保存在单独的文件中。
2)不,不需要有一个主要的方法。但是,对于脚本来说,这是一个非常常见的成语:

def main():
    # Your code

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

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

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

于 2013-05-31T21:47:38.183 回答
0
  1. 不必,但如果该类被其他几个文件/类使用,它应该。
  2. 这是一个很好的做法,请参阅What does <if __name__==“__main__”:> do?
  3. Python 会查看 $PYTHONPATH ,它是在其中查找模块的目录列表。您可以将模块放在这些目录之一的子目录中,并使用import directoryname.module.. 您可以通过from directoryname.module import ClassName.
于 2013-05-31T21:59:42.127 回答