组织模块和包装的Python方法
我来自一个背景,我通常每个类创建一个文件。我也组织目录下的常用类。这种做法对我来说很直观,已经证明在C++,PHP,JavaSript等方面是有效的。组织模块和包装的Python方法
我在将这个隐喻带入Python时遇到了困难:文件不再是文件,而是正式的模块。在一个模块中只有一个类是不正确的---大多数类都是自己无用的。如果我有automobile.py
和Automobile
课,那么始终将它也引用为automobile.Automobile
似乎很愚蠢。
但是,与此同时,它似乎不正确抛出一吨码成一个文件,并收工。显然,一个非常复杂的应用程序应该有超过5个文件。
什么是正确的---或pythonic ---的方式? (或者如果没有正确的方法,你喜欢什么样的方式,为什么?)我应该在Python模块中投入多少代码?
想在“包装逻辑单元”的条款 - 这可能是一个类,但更多的是将一组密切合作类。类(或模块级函数 - 当模块级函数也可以作为选择时,始终使用静态方法不要“在Python中执行Java” - )可以根据此标准进行分组。基本上,如果A的大多数用户也需要B,反之亦然,A和B应该可能在同一个模块中;但是如果许多用户只需要其中的一个而不需要其他用户,那么他们应该可能位于不同的模块中(可能在相同的包中,即其中包含__init__.py
文件的目录)。
标准Python库,而远非完美,往往反映了(大部分)相当不错的做法 - 让你可以从它举例大多学习。例如,threading
模块当然限定Thread
类...但它也保持同步原语类如锁,事件,条件和信号,并且可以通过螺纹的操作来产生的异常类(和几更多的东西)。它处于合理大小的上限(800行,包括空格和文档字符串)以及一些与线程相关的重要功能,例如Queue已放置在单独的模块中,但它是一个很好的示例,说明了它仍然有多大功能打包成一个模块。
如果你要坚持你的一类每个文件系统(这是合乎逻辑的,不要误会我的意思),你可能会做这样的事情,以避免提及automobile.Automobile
:
from automobile import Automobile
car = Automobile()
然而,正如cobbal提到,每个文件超过一类是在Python中很常见。无论哪种方式,只要你选择一个合理的系统并持续使用它,我认为任何Python用户都不会对你生气:)。
在一个中等规模的项目,我发现自己有几套密切相关的类。现在几个这样的组合被分组成文件;例如,低级网络类都在单个network
模块中。然而,一些最大的类已经被分解到他们自己的文件中。
也许开始下降,从一类每个文件的历史,路径的最好办法是采取,你通常会放置在同一个目录中的类,而是让他们在同一个文件中。如果该文件看起来太大,请将其分割。
如果您是从C++的角度来看,您可以查看类似于.so或.dll的python模块。是的,它们看起来像源文件,因为python是脚本化的,但它们实际上是可加载的特定功能库。
另一个可能有用的隐喻是你可能会将python模块看作命名空间。
Duplicate:http://*.com/questions/1642975/folder-and-file-organization-for-python-development – 2009-11-26 13:12:21
Duplicate:http://*.com/questions/106896/how-many-python - 班-应该-I-把功能于一身的文件 – 2009-11-26 13:15:20