从函数创建Python对象

时间:2013-06-25 12:55:01

标签: python oop

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

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

我的问题是组织事物的好方法是什么。函数fromFILE()是否属于类的一部分,如果是,那么写这个的最佳方法是什么?

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

2 个答案:

答案 0 :(得分:8)

你可以把它变成一个类方法:

class Molecule(object):
    # ...

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

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

import mymodule

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

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

答案 1 :(得分:0)

  1. 您的分子的行为是否关心文件IO?可能不是,这表明该分子是一个实体,应该是持久性无知的。同时,它需要强制执行自己的业务逻辑。
  2. 构建分子本身的业务逻辑需要哪些信息?若然后你可能想考虑使用存储库模式或工厂模式,或两者的组合(我会做什么)
  3. 例如:

    import repositories
    mol = repositories.MoleculeRepository.FromFile('toto')
    
相关问题