Python组织小型项目/脚本

Python组织小型项目/脚本,python,Python,我对python非常陌生,对一些事情不确定 类应该在单独的文件中吗 独立脚本是否有主方法?如果是这样的话,这是如何工作的,因为我有一个没有被调用的main方法 单元测试目录通常放在哪里?它如何“包含”正在测试的文件 这里有很多内容要讲,把这些问题分成单独的问题/疑问可能会更好:) 我会抵制不必要地将类拆分为单个文件。有些类可能严重依赖于其他类,我(个人)喜欢将它们保存在同一个文件中。我觉得最好的约定是基于功能创建文件,而不是为每个类创建单独的文件 我从Flask和Jinja2等Pocoo项目中获

我对python非常陌生,对一些事情不确定

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

  • 这里有很多内容要讲,把这些问题分成单独的问题/疑问可能会更好:)

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

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

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

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

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

    因此,在考虑将测试放在何处时,post是一个很好的起点,尽管一般的答案似乎是“哪里最适合你/你的团队”:

    稍微相关的一点是,我还建议研究一下测试框架,因为它从Python测试中删除了很多样板文件


  • 我将回答问题1和2

    1) 这要看情况。如果您的类很小,那么可以将它们放在同一个文件中。如果它们变得很大,通常会保存在单独的文件中。
    2) 不,不需要有主方法。然而,对于脚本来说,这是一个非常常见的习语:

    def main():
        # Your code
    
    # At the bottom of the file
    if __name__ == '__main__':
        main()
    
    这样,您的
    main
    仅在文件作为脚本运行时才会运行,但在作为模块导入时不会运行。当您导入模块时,Python将只执行它在函数中没有遇到的任何代码,因此如果您以后想将脚本作为模块重用,这将为您提供保护

    这只是一个习语,
    main
    在python中没有特殊意义,因此您不必调用它或其他任何东西

  • 不必如此,但如果该类被其他几个文件/类使用,则应如此
  • 这是一个很好的做法,请看
  • Python查看$PYTHONPATH,它是一个目录列表,可以在其中查找模块。您可以将模块放在其中一个目录的子目录中,并使用
    import directoryname.module.
    导入它们。您可以通过从directoryname.module导入ClassName导入类

  • 第一个是个人偏好,不像Java,我认为Java是必需的,在python中它不是。但从我所看到的情况来看,大多数人把他们所有的类放在一个文件中,只是为了简化导入。我宁愿导入一件东西并让
    导入类
    ,而不是
    导入类1、类2、类3
    。第2个是你想要的。通常,人们会在python文件的末尾添加
    ,如果双击或从命令promptIt加载它,就会导致它运行
    go()
    ,而不是
    \uu main
    方法。习惯用法是
    如果uuu name uuu=='uuu main uuu'
    那么调用我经常调用的函数
    main()
    @MikeMüller谢谢你的更正,mike,我已经把它合并到我的答案中了。