替换 python 中对象的实例
Replace Instance of an object in python
我有一个 class,其中一种方法是在需要时替换封装在对象中的整个数据。但是,我不确定如何将更新数据写入对象。是否可以将实例分配给新实例,也许像 self=new_self?我知道我可以创建一个新实例,然后更改 ptr 以指向它,但我想检查一下我是否可以只更新同一个实例。
class Dictionary:
def __init__(self, collection_size):
self.dictionary = [Term() for _ in range(collection_size)]
self.collection_size = collection_size
def load(self, src):
with open(src, 'rb') as handle:
self = pickle.load(handle) # this is the part that needs editing
我认为 class 方法可能最有意义,比如
class Dictionary:
def __init__(self, collection_size):
self.dictionary = [Term() for _ in range(collection_size)]
self.collection_size = collection_size
@classmethod
def load_from_pickle(cls, src):
with open(src, 'rb') as handle:
cls = pickle.load(handle)
return cls
loaded_dictionary = Dictionary.load_from_pickle('path/to/pickle')
您可能需要在加载方法上设置一些“防护栏”,以确保您正在解开一个有效的对象。
在某些时候,您可能还需要某种 Dictionary.merge,但这似乎与从 pickled 对象初始化无关。
感谢大家的回复。我混合使用了 Andrew 和 Juanpa 的答案。由于我的数据处理方式,没有必要进行合并,但是 + 添加 try/except 到 load_from_pickle 是一个很好的观点。这就是我所确定的。警告:不确定再次调用 init 是否是禁忌。
class Dictionary:
def __init__(self, collection_size=None, dictionary=None):
self.dictionary = dictionary if dictionary else {}
self.collection_size = collection_size
self.collection_postings_list_ptr = 0
def load(self, src):
with open(src, 'rb') as handle:
new_dictionary = pickle.load(handle)
self.__init__(new_dictionary.collection_size, new_dictionary.dictionary)
我有一个 class,其中一种方法是在需要时替换封装在对象中的整个数据。但是,我不确定如何将更新数据写入对象。是否可以将实例分配给新实例,也许像 self=new_self?我知道我可以创建一个新实例,然后更改 ptr 以指向它,但我想检查一下我是否可以只更新同一个实例。
class Dictionary:
def __init__(self, collection_size):
self.dictionary = [Term() for _ in range(collection_size)]
self.collection_size = collection_size
def load(self, src):
with open(src, 'rb') as handle:
self = pickle.load(handle) # this is the part that needs editing
我认为 class 方法可能最有意义,比如
class Dictionary:
def __init__(self, collection_size):
self.dictionary = [Term() for _ in range(collection_size)]
self.collection_size = collection_size
@classmethod
def load_from_pickle(cls, src):
with open(src, 'rb') as handle:
cls = pickle.load(handle)
return cls
loaded_dictionary = Dictionary.load_from_pickle('path/to/pickle')
您可能需要在加载方法上设置一些“防护栏”,以确保您正在解开一个有效的对象。
在某些时候,您可能还需要某种 Dictionary.merge,但这似乎与从 pickled 对象初始化无关。
感谢大家的回复。我混合使用了 Andrew 和 Juanpa 的答案。由于我的数据处理方式,没有必要进行合并,但是 + 添加 try/except 到 load_from_pickle 是一个很好的观点。这就是我所确定的。警告:不确定再次调用 init 是否是禁忌。
class Dictionary:
def __init__(self, collection_size=None, dictionary=None):
self.dictionary = dictionary if dictionary else {}
self.collection_size = collection_size
self.collection_postings_list_ptr = 0
def load(self, src):
with open(src, 'rb') as handle:
new_dictionary = pickle.load(handle)
self.__init__(new_dictionary.collection_size, new_dictionary.dictionary)