每个类是否应放在单独的.py文件中?

45 投票
6 回答
27608 浏览
提问于 2025-04-15 18:13

我对Python还很陌生。

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

比如在C#中,我会有一个类专门处理所有数据库的操作,然后还有一个类负责业务规则。

在Python里也是这样吗?

6 个回答

7

我和其他人有不同的看法,我认为可以把每个类放在自己的文件里(模块)。不过也有例外,下面我用一个例子来解释一下。

假设你有一个叫做 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

有时候你可能想把多个类放在同一个模块里。你应该在两个或多个类概念上相关,几乎总是一起使用而不是单独使用的情况下这样做。这是例外,而不是常规。在这种情况下,把所有类名添加到 __all__ 全局变量中。

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

9

每个 .py 文件代表一个模块,所以你应该把相关的函数、常量和类放在同一个文件里,这样更有条理。

如果一个 .py 文件里有很多类,会让你的模块列表变得很臃肿,因为如果你只对其中一个类感兴趣,还是会看到其他的类。

from whatever import SomeClass
37

不,通常在Python中,相关的类应该放在同一个模块里。虽然有时候一个类会单独放在一个模块里(特别是当这个类比较大的时候),但这并不是我们追求的目标。而且如果你真的这样做了,请不要把模块命名为这个类的名字——这样只会让你自己和别人搞混,搞不清楚哪个是哪个。

撰写回答