在__init__函数中从泡菜初始化对象

fre*_*ude 1 python constructor initialization pickle

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

Mos*_*oye 5

这样做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
Run Code Online (Sandbox Code Playgroud)

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