从函数创建Python对象

Ger*_*Ger 2 python oop

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

import mymodule
mol = mymodule.fromFILE("toto")
mol.method()
...
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ers 8

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

class Molecule(object):
    # ...

    @classmethod
    def fromFile(cls, filename):
        data = # ... parse data from filename ...
        return cls(data)
Run Code Online (Sandbox Code Playgroud)

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

import mymodule

mol = mymodule.Molecule.fromFile('toto')
Run Code Online (Sandbox Code Playgroud)

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