我应该在自己的.py文件中创建每个类吗?

Ser*_*pia 34 python

我对Python一般都很陌生.

我知道我可以在同一个.py文件中创建多个类,但我想知道是否应该在自己的.py文件中创建每个类.

例如,在C#中,我将有一个处理所有数据库交互的类.然后是另一个有业务规则的类.

这是Python的情况吗?

Tho*_*ers 30

不是.典型的Python风格是将相关的类放在同一个模块中.可能是一个类最终存在于它自己的模块中(特别是如果它是一个大类),但它本身不应该是一个目标.当你这样做时,请不要在课后命名模块 - 你最终会让自己和其他人混淆哪些是哪个.

  • 来自Java我有同样的问题,男孩被困了一段时间.:-) (4认同)

ric*_*cho 8

每个.py文件代表一个模块,因此您应该将函数,常量和类的逻辑组保存在同一个文件中.

.py文件中的每个类都只会在模块表中创建史诗膨胀,因为如果你只对一个类感兴趣,你仍然可以

from whatever import SomeClass
Run Code Online (Sandbox Code Playgroud)

  • Python样式通常使用`lowercase`作为模块名称,使用`CapWords`作为类名:http://www.python.org/dev/peps/pep-0008/ (7认同)

Nat*_*ton 5

我不同意其他人的说法,是的。对我来说,将每个类放在自己的文件(模块)中效果更好。但是也有例外,所以让我举一个例子来解释。

如果您有Foo类,则将其放入名为Foo.py的文件中,其中包含以下部分:

  1. 进口货
    • 这是您引入依赖关系的地方。
    • 范例:import mathfrom Bar import *
  2. 全球
    • 在这里定义模块的外部接口,这些外部接口是在模块外部可见的所有符号。
    • 例: __all__ = ['Foo']
    • 您也可以在此处定义全局变量(错误)和全局常数(良好)。这些全局变量不需要导出;可以将它们设为全局代码只是为了简化代码。
    • 示例:PI = 3.14159表示您可以编写PI,而如果您在类Foo中定义它,则需要编写Foo.PI
  3. 功能
    • 在这里定义所有与类Foo相关但不属于类Foo命名空间的顶级函数。由于类同时允许@staticmethods内部类和内部类,因此它们可能很少见。
    • 例: def print_foo(foo): print(foo)
  4. 班级
    • 例: class Foo(object): pass

有时您可能想在同一模块中放置多个类。当两个或多个类在概念上与几乎总是一起使用它们而从未独立使用它们有关时,应该执行此操作。这是例外,不是常规。在这种情况下,请将所有类名添加到__all__全局名。

最后,对于每个模块Foo.py,都应该有一个名为testFoo.py的相应单元测试模块。