类组织的Python代码结构

问题描述 投票:0回答:4

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

python structure
4个回答
4
投票

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

绝对不行。实际上,Python 并不强迫你将所有代码放在类中 - 普通函数也可以 - 所以即使是“每个类”的前提也没有意义。

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

绝对不行——它只会让你的代码维护起来变成一场噩梦。

或者我应该将我的代码(我的所有类)转储到一个文件中?

都不是(除非它是一个非常小的应用程序)。您希望将代码(函数、类等)重新组合为内聚的、解耦的模块/包,无论如何,这是所有语言中已知的最佳实践。如果您有一个包含域代码、持久性和 UI 的“完整”应用程序,您可能希望将其用作您的第一级包。


3
投票

TLDR: Python 不会在结构上限制您,尽管遵循最佳实践可以带来更好的编码体验。 Python 文件应该是相似代码的分组,并且可以在其他文件中使用。该分组被视为一个模块。


它可能取决于项目/用例,以及您想要如何构建代码/应用程序。 在Python中,“一切都是对象”咳咳包括类。

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

例如

exceptions.py
:

class ApplicationError(Exception):
    pass

class LoadingError(Exception):
    pass

class ValidationError(ApplicationError):
    pass

或者如果你有一个类覆盖另一个类

F

breeds.py
或示例
breeds.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")

我现在所做的基本上是 2 个 python 模块,这些有助于将 python 应用程序分解成小块。

随着你的程序变得越来越长,你可能想把它分成几个 文件以便于维护。您可能还想使用方便的 您在多个程序中编写的函数,但未复制其 定义到每个程序中。

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

模块是包含Python定义和语句的文件。 文件名是模块名加上后缀.py。

在某些情况下,在一个文件中使用多个类和定义可能会很方便,但这取决于您计划如何构建项目。当然,您可以将所有代码放入一个文件中,但这很难管理,并且违背了 Python 的 Zen“可读性很重要”。

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

与其他编程语言相比,Python的类机制 添加具有最少新语法和语义的类。它是一个

C++
Modula-3
中发现的类机制的混合。 Python 类提供了面向对象的所有标准功能 编程:类继承机制允许多个基类 类,派生类可以重写其基类的任何方法或 类,方法可以调用基类的方法 一样的名字。对象可以包含任意数量和类型的数据。 如 对于模块来说也是如此,类具有 Python 的动态特性: 它们是在运行时创建的,并且可以在运行后进一步修改 创作。


1
投票

当您使用 Python 构建代码时,根据名称空间(从名称到对象的映射)进行思考非常有用:https://docs.python.org/3/tutorial/classes.html .

然后你可以在模块(包含Python定义和语句的文件)中构建你的代码(取决于他的复杂性),然后在包(一种使用“点分模块名称”构建Python模块名称空间的方法)中:https://docs。 python.org/3/tutorial/modules.html


-1
投票

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

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

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

如果一个父类有很多子类,而子类的代码很少,最好放在一个文件中。

© www.soinside.com 2019 - 2024. All rights reserved.