具有多个不同节点的树的Python项目结构

2024-09-30 06:26:08 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我在python中实现了一个数据树,它表示非常类似于binary expression tree的数学表达式。 每个节点表示一个操作(+,*,exp(),…),每个叶表示一个数字或变量。因此,我创建了一个模块表达式.py,它包含用于数学运算的父类节点和子类。你知道吗

现在,随着项目变得越来越复杂,我开始实现越来越多的节点类型来覆盖更多的操作,而node的每个子类开始有相当多的任务方法,比如术语简化等

到目前为止,我在中实现了所有这些子节点表达式.py文件。但它现在是一个500多行的文件,我甚至还没有完成。我试图通过将每个子类放在一个文件(Java风格)中并将它们合并到一个包中来拆分它,这将符合我对正确结构的理解。但是这个实现给我带来了问题,因为不同的模块,比如加法.py乘法.py仍然互相引用。例如,一个加法-对象的方法可能返回一个乘法-对象,反之亦然。你知道吗

我的问题是:你如何组织这样一个项目?除了将它们放在一个巨大的文件中之外,如何构造许多相互引用的相关子类?你知道吗

如果我把它们放在一个包裹里,我该如何正确地导入它们?我该如何正确地引用它们呢?你知道吗

编辑: 好的,让我更具体一点,这是一些示例代码:

class Node():
    def __init__(self):
        pass
    def derive(self):
        pass


class Sine(Node):
    def __init__(self, arg):
        self.arg = arg
    def derive(self):
        return Cosine(self.arg)

class Cosine(Node):
    def __init__(self, arg):
        self.arg = arg
    def derive(self):
        return Multiplication(Num(-1), Sine(self.arg))

class Multiplication:
      ...

正如您所看到的,SineCosine类有一个循环依赖关系,我不能(有意地)将其拆分为两个独立的文件。尽管我不想把成千上万行的子类放到一个文件中。这只是示例代码。这些类实际上由更多的行组成。你知道吗


Tags: 文件pyselfnode节点init表达式def
1条回答
网友
1楼 · 发布于 2024-09-30 06:26:08

因为您没有显示任何代码,所以只能给出一般性的答案。首先,在将所有内容放入一个文件和将每个类放入单个文件之间,您可以选择将类组放入模块中。我怀疑你们所有的课程都是相互依赖的。因此,您需要更好地理解依赖项的结构。如果您了解该结构,Python将为您提供用代码表示该结构的工具。mixin,decorators,meta类。。。是表达复杂结构而不违反干法的有力工具。所以我的建议是:试着更好地理解你的结构!你知道吗

相关问题 更多 >

    热门问题