如何使用“腌”

发布于 2021-01-29 15:04:36

我的代码(我无法使用’pickle’):

class A(object):
    def __getstate__(self):
        print 'www'
        return 'sss'
    def __setstate__(self,d):
        print 'aaaa'

import pickle
a = A()
s = pickle.dumps(a)
e = pickle.loads(s)
print s,e

打印:

www
aaaa
ccopy_reg
_reconstructor
p0
(c__main__
A
p1
c__builtin__
object
p2
Ntp3
Rp4
S'sss'
p5
b. <__main__.A object at 0x00B08CF0>

谁能告诉我如何使用。

关注者
0
被浏览
72
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    你想做什么?这个对我有用:

    class A(object):
        def __init__(self):
            self.val = 100
    
        def __str__(self):
            """What a looks like if your print it"""
            return 'A:'+str(self.val)
    
    import pickle
    a = A()
    a_pickled = pickle.dumps(a)
    a.val = 200
    a2 = pickle.loads(a_pickled)
    print 'the original a'
    print a
    print # newline
    print 'a2 - a clone of a before we changed the value'
    print a2
    print
    
    print 'Why are you trying to use __setstate__, not __init__?'
    print
    

    所以这将打印:

    the original a
    A:200
    
    a2 - a clone of a before we changed the value
    A:100
    

    如果需要setstate:

    class B(object):
        def __init__(self):
            print 'Perhaps __init__ must not happen twice?'
            print
            self.val = 100
    
        def __str__(self):
            """What a looks like if your print it"""
            return 'B:'+str(self.val)
    
        def __getstate__(self):
            return self.val
    
        def __setstate__(self,val):
            self.val = val
    
    b = B()
    b_pickled = pickle.dumps(b)
    b.val = 200
    b2 = pickle.loads(b_pickled)
    print 'the original b'
    print b
    print # newline
    print 'b2 - b clone of b before we changed the value'
    print b2
    

    打印:

    Why are you trying to use __setstate__, not __init__?
    
    Perhaps __init__ must not happen twice?
    
    the original b
    B:200
    
    b2 - b clone of b before we changed the value
    B:100
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看