创建继承类或使用父对象实例初始化的类更好吗?

2024-09-19 23:40:55 发布

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

我喜欢Python在模块之间的相对导入和代码简洁性。在对大量数据集执行操作时,我将使用python作为主要框架,然后可以通过使用FORTRAN等速度更快的语言编写的即插即用模块来处理计算量大的部分

在我当前的状态下,我有一个名为sigmareader的包,它本质上是一个类;类是在__init__.py中定义的,而方法是从它们各自的包中调用的。sigmareader的结构如下所示:

sigmareader
├── __init__.py
├── _reader
│   ├── ...
├── ...

为了读取数据,我创建了sigmareader的一个实例,并使用reader方法。中的读取数据以适当的形式存储在实例的self属性中

这本身就是一项相当繁重的计算任务。现在读取并存储数据后,我想继续进行产品计算。我预计产品计算同样复杂且计算量很大,因此我想将其作为一个单独的包,名为sigmaproduct

sigmaproduct
├── __init__.py
├── _cloudproduct
│   ├── ...
├── ...

产品计算需要输入存储在sigmareader实例中的读取数据。我认为有三种方法可以做到这一点

第一种方法 使sigmaproduct成为sigmareader的子类

要说明工作流,请执行以下操作:

sigmaproduct_ins = sigmaproduct()

for dataset in dataset_lst:
    sigmaproduct_ins.reader(dataset) # storing read data in instance
    sigmaproduct_ins.cloudproduct() # reading and storing cloudproduct in instance

    ...further operations

第二种方法 使sigmaproduct成为一个独立类,它使用sigmareader的实例进行初始化。如果sigmareader的实例已经激活了它的方法;i、 它已经将读取的数据存储在它的self属性下

要说明工作流,请执行以下操作:

sigmareader_ins = sigmareader()

for dataset in dataset_lst:
    sigmareader_ins.reader(dataset) # storing read data in instance
    sigmaproduct_ins = sigmaproduct(sigmareader_ins) # creating instance of sigmaproduct
    sigmaproduct_ins.cloudproduct() # reading and storing cloudproduct in instance

    ...further operations

第三种方法 使sigmaproduct成为一个独立的类,它初始化为一个泛型对象,就像sigmareader;i、 e.它的初始化独立于数据集。相反sigmaproduct的方法需要sigmareader实例的输入来计算乘积

要说明工作流,请执行以下操作:

sigmareader_ins = sigmareader()
sigmaproduct_ins = sigmaproduct()

for dataset in dataset_lst:
    sigmareader_ins.reader(dataset) #storing read data in instance
    sigmaproduct_ins.cloudproduct(sigmareader_ins) #computing and storing data stored in sigmareader_ins

    ... futher operations

由于每个包中有许多不同的方法,我希望尽可能保持sigmareadersigmaproduct作为独立的类,因此我不喜欢使用第一种方法

然而,dataset_lst包含大量的dataset,因此我正在寻找计算上最优化的方法。哪一个是最好的?每种方法的优点和缺点是什么?有没有其他我错过的最佳方法


Tags: 数据实例方法instanceindatainitdataset