2

我的问题可能更多地与 OOP 相关,而不是与 python 相关。我写了一个类来描述一个分子,然后我写了一个函数来从一个特定的文件格式创建一个分子对象:fromFILE. 因此,例如,当我使用我的课程时,我会执行以下操作:

import mymodule
mol = mymodule.fromFILE("toto")
mol.method()
...

我的问题是组织事物的好方法是什么。函数 fromFILE() 是否应该是类的一部分,如果是,最好的方法是什么?

到目前为止,我只是将类和可用于创建此类的函数放入同一个模块中,但我不知道这是否是最好的方法。

4

2 回答 2

8

您可以将其设为类方法:

class Molecule(object):
    # ...

    @classmethod
    def fromFile(cls, filename):
        data = # ... parse data from filename ...
        return cls(data)

这有一个额外的好处,即子类可以简单地继承它,或者覆盖它以调整方法的作用(包括调用原始父实现)。它提供了一个替代类工厂:

import mymodule

mol = mymodule.Molecule.fromFile('toto')

将这个工厂与类本身整齐地分组。

于 2013-06-25T12:56:37.043 回答
0
  1. 您的分子的行为是否关心文件 IO?可能不是,这表明分子是一个实体,应该是持久性无知的。同时它需要执行自己的业务逻辑。
  2. 构建分子所需的信息本身是业务逻辑吗?如果是这样,那么您可能要考虑使用存储库模式或工厂模式,或者两者的组合(我会做什么)

前任:

import repositories
mol = repositories.MoleculeRepository.FromFile('toto')
于 2013-06-25T13:03:44.327 回答