我有一个类,我想根据参数以多种方式实例化对象。当我将文件路径传递给函数 __init__ 时,它​​应该从保存为 pickle 文件的对象中恢复所有参数。有没有什么聪明的方法可以做到这一点,比如 self=load(...)

最佳答案

self=load(...) 中执行 __init__ 只会屏蔽 self 中的本地 __init__ 变量,它不会更改实例。

您可以改为在类的 __new__ 方法中控制新实例的创建。

import pickle

class Pretty(object):
    def __new__(cls, filepath=None, *args, **kwargs):
        if filepath:
            with open(filepath) as f:
               inst = pickle.load(f)
            if not isinstance(inst, cls):
               raise TypeError('Unpickled object is not of type {}'.format(cls))
        else:
            inst = super(Pretty, cls).__new__(cls, *args, **kwargs)
        return inst

您可以对 unpickled 对象进行快速实例检查,以确保它实际上是您的类的实例,否则您可能会出现不良行为,例如您的类的 __init__ 方法未被调用。

关于python - 从 __init__ 函数中的 pickle 初始化对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43965376/

10-12 17:03