每个类是否应放在单独的.py文件中?
我对Python还很陌生。
我知道我可以在同一个.py文件里创建多个类,但我在想是不是应该把每个类放在自己的.py文件里。
比如在C#中,我会有一个类专门处理所有数据库的操作,然后还有一个类负责业务规则。
在Python里也是这样吗?
6 个回答
7
我和其他人有不同的看法,我认为可以把每个类放在自己的文件里(模块)。不过也有例外,下面我用一个例子来解释一下。
假设你有一个叫做 Foo 的类,那么你应该把它放在一个叫 Foo.py 的文件里,文件结构大致分为以下几个部分:
- 导入部分
- 这里是用来引入你需要的依赖库的。
- 举个例子:
import math
,from Bar import *
- 全局变量
- 这里是定义模块对外接口的地方,也就是在这个模块外部可见的所有符号。
- 例如:
__all__ = ['Foo']
- 你还可以在这里定义全局变量(不推荐)和全局常量(推荐)。这些全局变量不一定要导出;有时候只是为了简化代码而设定为全局的。
- 例如:
PI = 3.14159
这意味着你可以直接使用PI
,而如果你把它定义在 Foo 类里面,就需要写成Foo.PI
。
- 函数
- 这里是定义所有与 Foo 类相关但不属于 Foo 类命名空间的顶层函数的地方。这种情况可能比较少,因为类本身就允许使用
@staticmethods
和内部类。 - 例如:
def print_foo(foo): print(foo)
- 这里是定义所有与 Foo 类相关但不属于 Foo 类命名空间的顶层函数的地方。这种情况可能比较少,因为类本身就允许使用
- 类
- 例如:
class Foo(object): pass
- 例如:
有时候你可能想把多个类放在同一个模块里。你应该在两个或多个类概念上相关,几乎总是一起使用而不是单独使用的情况下这样做。这是例外,而不是常规。在这种情况下,把所有类名添加到 __all__
全局变量中。
最后,对于每个模块 Foo.py,应该有一个对应的单元测试模块,叫做 testFoo.py。
9
每个 .py 文件代表一个模块,所以你应该把相关的函数、常量和类放在同一个文件里,这样更有条理。
如果一个 .py 文件里有很多类,会让你的模块列表变得很臃肿,因为如果你只对其中一个类感兴趣,还是会看到其他的类。
from whatever import SomeClass
37
不,通常在Python中,相关的类应该放在同一个模块里。虽然有时候一个类会单独放在一个模块里(特别是当这个类比较大的时候),但这并不是我们追求的目标。而且如果你真的这样做了,请不要把模块命名为这个类的名字——这样只会让你自己和别人搞混,搞不清楚哪个是哪个。