第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python中類方法中的自解壓

python中類方法中的自解壓

慕慕森 2021-07-16 18:00:15
我正在嘗試創(chuàng)建一個可以使用類方法序列化和反序列化自身的對象,而不使用 return 語句(我不想要靜態(tài)方法)。這是我的班級的一個概念和一個天真的用例:import pickleclass A:    def __init__(self):        self.x = 0    def add(self):        self.x += 1    def serialize(self, filename):        """Simple object serialization given a filename"""        with open(filename, 'wb') as f:            pickle.dump(self, f)            print("Serialized with value of: %d" % (self.x))    def deserialize(self, filename):        """Simple object deserialization given a filename"""        with open(filename, 'rb') as f:            print("self.x before load (inside deserialize): %d" % (self.x))            self = pickle.load(f)            print("Deserialized value inside deserialize function: %d" % (self.x))a1 = A()a2 = A()a1.add()a1.add()a1.serialize('a.pkl')a2.deserialize('a.pkl')print("Deserialized value outside: %d" % (a2.x))但是,一旦我離開反序列化方法,self(在這種情況下,實(shí)例a2)就不會保留其值。運(yùn)行時輸出:>> Serialized with value of: 2>> self.x before load (inside deserialize): 0>> Deserialized value inside deserialize function: 2>> Deserialized value outside: 0為什么會這樣?我也嘗試過在函數(shù)deepcopy之后使用pickle.load,deserialize但似乎沒有任何效果,我想了解原因。
查看完整描述

2 回答

?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個贊

這不起作用的原因是因?yàn)槟悴荒芊峙浣o self (或者更確切地說:這樣做并沒有做你認(rèn)為它做的事情)。如果您有興趣了解實(shí)際發(fā)生的情況,請嘗試為 分配一些奇怪的東西self,例如self = "foobar"(行為將保持不變)。


制作deserialize一個類方法并將其用作“構(gòu)造函數(shù)”:


@classmethod

def deserialize(cls, filename):

    """Simple object deserialization given a filename"""

    with open(filename, 'rb') as f:

        obj = pickle.load(f)

        print("Deserialized value inside deserialize function: %d" % (obj.x))

        return obj

然后像這樣使用它:


a2 = A.deserialize('a.pkl')

輸出:


序列化值:2

反序列化函數(shù)內(nèi)部反序列

化值:2 外部反序列化值:2


查看完整回答
反對 回復(fù) 2021-07-21
?
HUWWW

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個贊

回復(fù)晚了非常抱歉。Pickle 將對象扁平化為字典。這是修復(fù)它的方法:


    def serialize(self, filename):

        """Simple object serialization given a filename"""

        with open(filename, 'wb') as f:

            pickle.dump(self.__dict__, f)

            print("Serialized with value of: %d" % (self.x))


    def deserialize(self, filename):

        """Simple object deserialization given a filename"""

        with open(filename, 'rb') as f:

            print("self.x before load (inside deserialize): %d" % (self.x))

            self.__dict__ = pickle.load(f)

            print("Deserialized value inside deserialize function: %d" % (self.x))


查看完整回答
反對 回復(fù) 2021-07-21
  • 2 回答
  • 0 關(guān)注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號