过去十年我一直是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中构建此应用程序?
答案 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一样每个文件都有一个类。你可以自由地拥有更多,如果它们紧密相关,那么将它们全部放在同一个模块中通常是有意义的。