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

时间:2010-01-19 23:49:00

标签: python

我对Python很新。

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

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

这是Python中的情况吗?

6 个答案:

答案 0 :(得分:28)

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

答案 1 :(得分:8)

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

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

from whatever import SomeClass

答案 2 :(得分: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)
    • 示例:class Foo(object): pass
  4. 有时您会希望在同一个模块中放置多个类。每当两个或多个类在概念上与您几乎总是一起使用它们并且从不独立地使用它们时,您应该这样做。这是例外,不是常态。在这种情况下,将所有类名添加到__all__全局。

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

答案 3 :(得分:3)

值得一提的另一点是,如果文件变得太大,您可以随时将其转换为包,从而轻松重新组织而不会破坏客户端的代码。

答案 4 :(得分:2)

可能不是。 Python文件是“模块”。模块应该包含可以独立重用的代码。如果它包含几个类,这是常态,那就完全可以了。

答案 5 :(得分:2)

是每个类都在自己的文件中。在具有多个类的文件中导入甚至单个类(或函数)会导致python执行文件中所有类的定义。试试这个:

manyClass.py

class foo():
   print 'a bunch of time consuming work'

class tryme():
   print 'try me'

现在在解释器shell中输入...

来自manyClasses import tryme

一堆耗时的工作
试试我