2014-03-28 42 views
0

我是过去十年的PHP开发人员,但认为这可能是学习另一种语言的明智之举。像Python一样。
当你有编程背景时,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.php这是由两个脚本来实现:公司\群集\导入\ Array.php和\ Csv.php
此外,我有一些类负责处理和准备传入的数据以发送给DAO。

我该如何在Python中构造这个应用程序?

+0

使用任何框架,每个框架都有自己的结构。 – fledgling

+1

可能会有帮助:https://coderwall.com/p/lt2kew – sshashank124

+0

谢谢@ sshashank124,我会查看该页面。 –

回答

2

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

包是一个包含模块和其他包的文件夹,允许尽可能多地嵌套。为了将Python文件夹识别为一个包,它必须包含一个__init__.py文件(目前,只有具有该名称的空文件就足够了)。

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

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

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

然后定义在any_class.pyAnyClass

from vendor.mymodule.mysubmodule.any_class import AnyClass 

熊在你没有明确的导入类记:之后,你可以从main.py这种方式导入。你可以导入模块(== 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中一样。你可以有更多的自由,如果它们是紧密相关的,那么将它们全部放在同一个模块中通常是有意义的。

+0

因此,为了扩展我的示例,我创建了以下结构:Company \ Cluster \ Import.py,其中我定义了Array和Csv类,对吗?然后我可以使用它:import Company.Cluster.Import,csv = Import.Csv()。谢谢! –

+1

关闭但不确切。你必须从'Company.Cluster import Import'执行'' – bgusach