Skip to main content
 首页 » 编程设计

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

2025年05月04日1398°冷暖

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