python - 在 __init__ 函数中从 pickle 初始化对象

标签 python constructor initialization pickle

我有一个类,我想根据参数以多种方式实例化对象。当我将文件路径传递给函数 __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

您可以对未 pickle 的对象进行快速实例检查,以确保它实际上是您的类的一个实例,否则您可能会遇到不良行为,例如 __init__你的类的方法没有被调用。

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

相关文章:

python - 使用 Mako 模板格式化日期

c# - 结构构造函数调用 this()

laravel-5 - 在 Laravel 5.4 Controller 构造函数中获取用户

c - 如何在不同的 if 语句中访问我的结构的元素?

ios - 从字符串中获取静态变量

python - Alpha Vantage API 国外股票日内时间序列转换成 pandas df

python - 将字符串解析为列 python pandas/xa0 而不是空格

python - 如何将毫秒转换为日期和时间格式?

java - 在 Java 中使用带有继承的最终列表

c++ - 使用花括号初始化列表在 vector 中插入一个新元素