如何构建Python应用程序结构

0 投票
1 回答
669 浏览
提问于 2025-04-18 00:17

我已经做了十年的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中组织这个应用程序呢?

1 个回答

2

这个问题很开放,但我想说你的问题在于你缺少了“包”的概念。

包就是一个文件夹,里面可以放模块和其他包,这样你可以随意嵌套。为了让Python识别一个文件夹是包,它必须包含一个叫做__init__.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中那样。你可以有多个类,如果它们之间关系紧密,通常把它们放在同一个模块里是有意义的。

撰写回答