繁体   English   中英

如何构建python应用程序

[英]How to structure python application

在过去的十年里,我一直是一名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中构建此应用程序?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM