gpt4 book ai didi

python - 在实例化时返回不同的对象

转载 作者:太空狗 更新时间:2023-10-30 03:06:55 24 4
gpt4 key购买 nike

当我实例化我编写的特定类时,我给它一个名称和几个属性作为 __init__ 的参数。给定传递的名称,我的 __init__ 尝试在磁盘上查找适用于该名称的文件,而不是处理传递的其他参数,而是从文件中读取所有这些参数。如果找不到该文件,则使用参数代替。

现在我想知道,如果我想使用pickle 来存储整个对象,而不是使用我自己的写入文件的例程,我将如何完成加载?我无法在 __init__ 中解开我的对象,因为那里已经创建了对象,对吧?

我的一个想法是编写一个我将用于实例化的类方法,如果它存储在磁盘上则返回一个未腌制的对象,否则它将使用传递的参数创建一个新对象。

另一个想法是使用 __new__ 而不是返回对象的类方法,但是我不知道这是否是 __new__ 的预期用途。

这些想法是否有任何好处,或者是否有更好的方法来实现这一点?

最佳答案

使用工厂函数而不是在 __init__ 中执行此操作。示例:

class Foo(object):
# whatever

def get_foo(path, *args, **kwargs):
try:
obj = pickle.load(open(path))
if not isinstance(obj, Foo):
raise TypeError, "%s does not contain a Foo" % path
return obj
except IOError as e:
if e[0] == errno.ENOENT:
return Foo(*args, **kwargs)
else:
raise

关于python - 在实例化时返回不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6788382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com