在将序列化的类对象存储在文件中之后,我想提供一个静态方法"Load“,它应该重新打开文件,反序列化对象并返回一个新的实例。
传统上,我会通过重载构造函数来处理这个问题,并传递所有必要的参数。但是,这在Python中并不常见,而是可以采用以下方法:
Python class setup for serialization without pickle
当我在静态方法中反序列化对象时,没有"cls“,到目前为止我还不知道如何管理它。总之,我希望有这样一种行为:
x = Foo() # default constructor. All serializable data is created later on
# working with x and creating data
x.save("my_file.pkr")
y = Foo.Load(x)load()函数如下所示:
@staticmethod
def load(filename):
with open(filename, 'rb') as bin_object:
lst1 = pickle.load(bin_object)
lst2 = pickle.load(bin_object)
lst3 = pickle.load(bin_object)
lst4 = pickle.load(bin_object)
lst5 = pickle.load(bin_object)
# not possible as I already use the default constructor
return Foo(lst1, lst2, lst3, lst4, lst5)有人能告诉我如何在静态加载方法中创建Foo对象吗?我仍然希望通过调用Foo()来创建“空”对象。
发布于 2015-06-16 17:18:15
你被Java的做事方式误导了。
在Python中,有staticmethod (不带参数)和classmethod (接受类)。后者是你想要的。
没有理由必须在构造函数中完成属性赋值,或者在初始化时完成。初始化后并从实例外部分配属性是完全有效和惯用的。
@classmethod
def load(cls, filename):
with open(filename, 'rb') as bin_object:
...
foo = cls()
foo.lst1 = lst1
foo.lst2 = lst2
...
return foohttps://stackoverflow.com/questions/30873908
复制相似问题