如何构造python应用程序

如何构造python应用程序,python,module,directory-structure,Python,Module,Directory Structure,在过去的十年里,我一直是一名PHP开发人员,但我认为学习另一种语言可能是明智之举。像Python。 当您有编程方面的背景时,Python的内部和外部并不难理解 但我还不明白的是如何构造我的应用程序以及如何布局我的类。在PHP中,约定是这样做的:Vendor\Module\SubModule\Class,它直接映射到文件系统上的目录和文件,Class.PHP是定义类的文件 我在Python中得到的最接近的东西是:Module.Class,其中Module.py是定义Class的文件。因此,使用这种

在过去的十年里,我一直是一名PHP开发人员,但我认为学习另一种语言可能是明智之举。像Python。
当您有编程方面的背景时,Python的内部和外部并不难理解

但我还不明白的是如何构造我的应用程序以及如何布局我的类。在PHP中,约定是这样做的:Vendor\Module\SubModule\Class,它直接映射到文件系统上的目录和文件,Class.PHP是定义类的文件

我在Python中得到的最接近的东西是:Module.Class,其中Module.py是定义Class的文件。因此,使用这种结构,属于这个模块的所有类都应该在module.py中定义

我不想模仿PHP的工作方式,我只是为上下文提供了它

所以真正的问题是:构建应用程序的Python方式是什么

编辑
好吧,也许问题太广泛了。为了学习python,我将一些php脚本转换为python。我有一个脚本,可以将包含集群信息的文件导入数据库。我的php结构如下所示:

.
`-- Company
    |-- Cluster
    |   |-- Cluster.php
    |   |-- Import
    |   |   |-- Array.php
    |   |   `-- Csv.php
    |   |-- Import.php
    |   |-- Map.php
    |   `-- Sync.php
因此,我有一个导入接口Company\Cluster\Import.php,它由两个脚本实现:Company\Cluster\Import\Array.php和\Csv.php
此外,我还有一些类负责处理和准备传入数据,以便发送到DAO


我可以如何用Python构建这个应用程序?

这是一个非常开放的问题,但我想说,您的问题是缺少包的概念

包是一个包含模块和其他包的文件夹,可以根据需要进行嵌套。对于Python来说,要将文件夹标识为包,它必须包含一个
\uuuu init\uuuuu.py
文件(目前,只有一个具有该名称的空文件就足够了)

在python中,模块是一个
.py
文件。我建议您不要在文件夹(又名包)中使用该名称

这样,就可以创建任意结构。例如,以您为例:

main.py
vendor/
    __init__.py
    mymodule/
        __init__.py
        mysubmodule/
             __init__.py
             any_class.py
然后在
any_class.py
中定义
AnyClass
。之后,您可以通过以下方式从
main.py
导入:

from vendor.mymodule.mysubmodule.any_class import AnyClass
请记住,您不必显式导入该类。您可以导入模块(=python文件)、包或任何您想要的内容。下面的例子非常有效,尽管不太常见

import vendor
my_obj = vendor.mymodule.mysubmodule.any_class.AnyClass()

from vendor import mymodule
my_obj = mymodule.mysubmodule.any_class.AnyClass()

...

from vendor.mymodule.mysubmodule import any_class
my_obj = any_class.AnyClass()

另一件需要记住的事情是,在python中,不像在java中那样,每个文件必须有一个类。您可以自由拥有更多,如果它们紧密相关,将它们全部放在同一个模块中通常是有意义的。

使用任何框架,每个框架都有自己的结构。可能会有帮助:谢谢@sshashank124,我将查看该页面。这完全取决于您编写的代码类型。@msvalkon,为什么它会依赖于此?当然,对于cli应用程序,您可能不需要mvc结构,但除此之外,这又有什么关系呢?因此,为了扩展我的示例,我创建了以下结构:Company\Cluster\Import.py,我在其中定义了数组和Csv类,对吗?然后我可以将其用作:import Company.Cluster.import,csv=import.csv()。谢谢接近但不精确。您必须从公司执行
。群集导入