Python类在多个文件中的组织可能性?

298 投票
6 回答
109285 浏览
提问于 2025-04-11 09:17

我习惯于Java的规则,每个文件只能有一个公共类。而Python没有这个限制,我想知道在组织类的时候,最好的做法是什么。

6 个回答

31

我个人喜欢Java的这种做法,原因很简单。把每个类放在单独的文件里,这样可以更方便地重用这些类,因为在查看源代码的时候,类会更容易被看到。如果你把很多类放在一个文件里,其他开发者可能就不容易发现那些可以重用的类,光是浏览项目的目录结构就可能看不出来。因此,如果你觉得你的类有可能被重用,我建议把它放在自己的文件里。

41

因为没有人为设定的限制,所以这完全取决于你能理解的程度。如果你有很多简单又短小的类,而且它们逻辑上是可以归在一起的,那就可以把它们放在同一个文件里。如果你有一些大而复杂的类,或者这些类放在一起没有什么意义,那就每个类一个文件。你也可以选择介于两者之间的方式。随着情况的变化,适时调整你的代码结构。

365

一个Python文件被称为“模块”,这是组织软件的一种方式,让它看起来更有条理。还有一种方式是用目录,叫做“包”。

模块是一个独立的东西,里面可能有一到二十个紧密相关的类。关键是,模块是你会导入的东西,而这个导入的方式需要让那些会阅读、维护和扩展你软件的人觉得很合理。

规则是这样的:模块是重用的基本单位

单独重用一个类是比较困难的,而你应该能够毫不费力地重用一个模块。你库里的所有东西(包括你下载并添加的东西)都是模块或者是模块的包。

举个例子,假设你正在做一个读取电子表格、进行一些计算并把结果加载到数据库里的程序。你希望你的主程序看起来是什么样的呢?

from ssReader import Reader
from theCalcs import ACalc, AnotherCalc
from theDB import Loader

def main( sourceFileName ):
    rdr= Reader( sourceFileName )
    c1= ACalc( options )
    c2= AnotherCalc( options )
    ldr= Loader( parameters )
    for myObj in rdr.readAll():
        c1.thisOp( myObj )
        c2.thatOp( myObj )
        ldr.laod( myObj )

把导入看作是组织代码的一种方式,可以把代码分成不同的概念或块。每个导入里有多少个类并不重要,重要的是你通过import语句所展现的整体组织结构。

撰写回答