从函数创建 Python 对象

标签 python oop

与 Python 相比,我的问题可能更多地与 OOP 相关。我写了一个类来描述一个分子,然后我写了一个函数来从特定的文件格式创建一个分子对象:fromFILE。因此,例如,我在使用我的类(class)时执行以下操作:

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

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

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

最佳答案

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

class Molecule(object):
    # ...

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

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

import mymodule

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

将这个工厂与类本身巧妙地组合在一起。

关于从函数创建 Python 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17297932/

相关文章:

c# - 当职责不属于该类时,使用多态性而不是条件

php - PHP OOP更新记录,但显示错误消息

python - 将 python 源文件作为 Egg 文件的一部分发送是否有意义

python - 如何在 Calendar 模块 Python 中将默认的第一周天数更改为 0

python - 如何重命名 django rest_framework 的 search_fields 中的字段?

JavaScript 初始化函数

java - 使用已检查的异常重写方法

javascript - Django:更改 javascript 函数内的字体颜色

python - numpy.distutils 对架构的奇怪选择

c# - 如何判断对象初始化程序何时完成