[英]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
然后,您可以在定义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一样每个文件都有一个类。 你可以自由地拥有更多,如果它们紧密相关,通常将它们全部放在同一个模块中是有意义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.