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