我有一個類,其中一種方法是在需要時替換封裝在物件中的整個資料。但是,我不確定如何將更新資料寫入物件。是否可以將實體分配給新實體,例如 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
uj5u.com熱心網友回復:
我認為類方法可能最有意義,例如
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')
您可能希望在 load 方法上有一些“護欄”,以確保您正在解開一個有效的物件。
在某些時候,您可能還需要某種 Dictionary.merge,但這似乎與從腌制物件初始化無關。
uj5u.com熱心網友回復:
感謝所有的回復。我混合使用了 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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/441395.html
標籤:Python python-3.x 班级
