car*_*arl 42 python module project-organization package
我来自一个背景,我通常每个类创建一个文件.我也在目录下组织公共类.这种做法对我来说很直观,并且已被证明在C++,PHP,JavaSript等中有效.
我无法将这个比喻带入Python:文件不仅仅是文件,而是正式的模块.在一个模块中只有一个类似乎是不对的 - 大多数类本身都是无用的.如果我有一个automobile.py
和一个Automobile
类,总是引用它似乎很愚蠢automobile.Automobile
.
但是,与此同时,将大量代码放入一个文件并将其称为一天似乎并不正确.显然,一个非常复杂的应用程序应该有超过5个文件.
什么是正确的 - 或pythonic ---方式?(或者,如果没有正确的方法,您首选的方式是什么?为什么?)我应该在Python模块中投入多少代码?
Ale*_*lli 33
从"包装的逻辑单元"来看 - 可能是一个单独的类,但更多时候是一组密切合作的类.类(或模块级函数 - 当模块级函数也可作为选择时,不要通过使用静态方法"在Python中执行Java"! - )可以根据此标准进行分组.基本上,如果A的大多数用户也需要B,反之亦然,A和B应该在同一个模块中; 但是如果许多用户只需要其中一个而不需要另一个,那么它们应该位于不同的模块中(可能在同一个包中,即包含__init__.py
文件的目录).
标准的Python库虽然远非完美,但往往反映(大多数)合理的良好实践 - 因此您可以通过示例来学习它.例如,threading
模块当然定义了一个Thread
类......但是它还包含同步原语类,如锁,事件,条件和信号量,以及可以通过线程操作引发的异常类(以及更多的东西) ).它在上界合理大小的(800线,包括空格和文档字符串),和一些重要的线程有关的功能性,诸如队列已经被放置在一个单独的模块,但是它是什么的功能最大量它仍然是有意义的一个很好的例子打包到一个模块.
如果你想坚持你的每个文件系统(这是合乎逻辑的,不要误解我),你可能会做这样的事情,以避免不得不参考automobile.Automobile
:
from automobile import Automobile
car = Automobile()
Run Code Online (Sandbox Code Playgroud)
但是,正如cobbal所提到的,每个文件不止一个类在Python中很常见.无论哪种方式,只要你选择一个合理的系统并始终如一地使用它,我认为任何Python用户都不会对你生气:).
如果您从c ++的角度来看,您可以查看类似于.so或.dll的python模块.是的,它们看起来像源文件,因为python是脚本化的,但它们实际上是可加载的特定功能库.
另一个可能有用的比喻是你可能会将python模块看作命名空间.
归档时间: |
|
查看次数: |
17132 次 |
最近记录: |