用于类组织的Python代码结构

时间:2019-02-01 09:11:40

标签: python structure

在Java中,代码以包的形式进行结构化,每个类都放在一个单独的文件中。 python中有类似的做法吗?将每个类放在不同的python文件中并相互导入会更好吗?还是我应该将我的代码(所有类)都转储到一个文件中?

4 个答案:

答案 0 :(得分:3)

  

在Java中,代码以包的形式进行结构化,每个类都放在一个单独的文件中。 python中有类似的做法吗?

绝对没有。实际上,Python不会强迫您将所有代码放入类中-普通函数也可以-因此,即使“每个类”的前提也没有道理。

  

将每个类放在不同的python文件中是否更好

绝对没有-这只会使您的代码难以维护。

  

还是我应该将代码(所有类)都转储到单个文件中?

两者都不是(除非它是一个很小的应用程序)。您想将代码(函数,类等)重新组合在具有内聚力的,解耦的模块/程序包中,无论如何,这是所有语言的最佳实践。如果您有一个带有域代码,持久性和UI的“完整”应用程序,则可能需要将此作为您的第一级软件包。

答案 1 :(得分:1)

在Python中构建代码时,考虑名称空间(从名称到对象的映射):https://docs.python.org/3/tutorial/classes.html很有用。然后,您可以在模块(包含Python定义和语句的文件)中组织代码(取决于他的复杂性),然后打包(通过使用“点分模块名称”来构造Python模块名称空间的一种方式):https://docs.python.org/3/tutorial/modules.html

答案 2 :(得分:1)

这取决于用例/您要如何构造代码/应用程序。

这是classes文档的第一篇摘录:

  

与其他编程语言相比,Python的类机制   用最少的新语法和语义添加类。它是一个   C++Modula-3中发现的类机制的混合。蟒蛇   类提供面向对象的所有标准功能   编程:类继承机制允许多个基数   类,派生类可以覆盖其基类的任何方法,或者   类,并且方法可以使用调用基类的方法   一样的名字。对象可以包含任意数量和种类的数据。 作为   对于模块,类具有Python的动态特性是正确的:   它们是在运行时创建的,之后可以进行进一步修改   创造。

基本上在Python中,“一切都是对象” cough cough 包括类。

话虽如此,如果您进一步阅读文档,在某些情况下,您可能希望在同一文件中有多个类,例如exceptions ,因为它们“也是类” “

class ApplicationError(Exception):
    pass

class LoadingError(Exception):
    pass

class ValidationError(ApplicationError):
    pass

可以将类似这样的内容放入errors.py

这样的文件中

或者如果您有一个覆盖另一个类的类,例如:

class Dog:
    def __init__(self, name, weight):
        self.name = name
        self.weight = weight

    def bark():
        return("Bark")

class Chihuahua(Dog):

    def bite_ankles():
        return("Pain")

类似的内容可以放在一个名为breeds.py的文件中。

我现在制作的基本上是2个python modules,它们可以将python应用程序分解成小块。

  

随着程序的变长,您可能需要将其拆分为几个   文件以便于维护。您可能还想使用方便   您在多个程序中编写的功能,但没有复制   每个程序的定义。

     

Python提供了一种将定义放入文件并在脚本中使用它们的方法   或在解释器的交互式实例中。这样的文件是   称为模块;可以将模块中的定义导入其他模块   模块或进入主模块(您所收集的变量的集合   可以访问在顶层执行的脚本和计算器   模式)

     

模块是一个包含Python定义和语句的文件。   文件名是模块名称,后缀.py。

在某些情况下,在一个文件中使用多个类和定义可能会很方便,但这取决于您计划构造项目的方式。当然,您可以将所有代码放入一个文件中,但这很难管理,并且与Zen of Python“可读性计数”相抵触。

答案 3 :(得分:-1)

默认情况下,python不会在代码文件中为每个类创建一个文件。

要为每个类创建单独的文件,每个类的代码应位于单独的文件中

如果两个类是相关的或紧密耦合的,并且客户端代码需要实例化每个,则最好将它们放在同一文件中。

如果一个父类具有许多子类,而子类具有很少的代码,则最好将其放入一个文件中。