如何构建python应用程序

时间:2014-03-28 07:03:28

标签: python module directory-structure

过去十年我一直是PHP开发人员,但认为学习另一种语言可能是明智之举。像Python一样 当你有编程背景时,Python本身并不难理解。

我无法理解的是如何构建我的应用程序以及如何布局我的类。在PHP中,惯例是这样做:Vendor \ Module \ SubModule \ Class,它直接映射到文件系统上的目录和文件,Class.php是定义Class的文件。

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

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

所以问题确实是:构建应用程序的pythonic方式是什么?

修改
好吧,也许问题太宽泛了。学习python我正在将一些PHP脚本转换为Python。我有一个脚本将具有群集信息的文件导入数据库。我的php结构如下所示:

.
`-- Company
    |-- Cluster
    |   |-- Cluster.php
    |   |-- Import
    |   |   |-- Array.php
    |   |   `-- Csv.php
    |   |-- Import.php
    |   |-- Map.php
    |   `-- Sync.php

所以我有一个Import接口Company \ Cluster \ Import.php,它由两个脚本实现:Company \ Cluster \ Import \ Array.php和\ Csv.php
此外,我有一些类负责处理和准备传入数据以发送到DAO。

我如何在Python中构建此应用程序?

1 个答案:

答案 0 :(得分:2)

这是一个非常开放的问题,但我会说你的问题是你错过了包的概念。

包是一个包含模块和其他包的文件夹,允许根据需要进行嵌套。要让Python将文件夹标识为包,它必须包含__init__.py文件(目前,只有一个具有该名称的空文件就足够了。)

在python中,模块是.py文件。我建议你不要将这个名字用于文件夹(又名包)。

像这样,你可以创建任意结构。例如,举个例子:

main.py
vendor/
    __init__.py
    mymodule/
        __init__.py
        mysubmodule/
             __init__.py
             any_class.py

然后在AnyClass中定义any_class.py。之后,您可以通过以下方式从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一样每个文件都有一个类。你可以自由地拥有更多,如果它们紧密相关,那么将它们全部放在同一个模块中通常是有意义的。