如果父类和子类实例被pickle,如何在类层次结构中最好地pickle/unpickle

2024-10-02 00:43:58 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个类a和一个从a派生的类B。我想pickle/unpickle类B的一个实例。a和B都定义了ugeState_u2;/uu setstate_uuu方法(假设a和B都很复杂,这就需要使用2; getstate_uuu和uu setstate_uuu)。B应该如何调用A的getstate\uu/\uu setstate\uu方法?我目前的,但可能不是“正确”的方法:

class A(object):
    def __init__():
        self.value=1
    def __getstate__(self):
        return (self.value)
    def __setstate__(self, state):
        (self.value) = state

class B(A):
    def __init__():
        self.anothervalue=2
    def __getstate__(self):
        return (A.__getstate__(self), self.anothervalue)
    def __setstate__(self, state):
        superstate, self.anothervalue = state
        A.__setstate__(self, superstate)

Tags: 方法selfreturninitvaluedefuuupickle
1条回答
网友
1楼 · 发布于 2024-10-02 00:43:58

我将使用super(B,self)获取{}的实例来调用A的方法:

import cPickle
class A(object):
    def __init__(self):
        self.value=1
    def __getstate__(self):
        return self.value
    def __setstate__(self, state):
        self.value = state

class B(A):
    def __init__(self):
        super(B,self).__init__()
        self.anothervalue=2
    def __getstate__(self):
        return (super(B,self).__getstate__(), self.anothervalue)
    def __setstate__(self, state):
        superstate, self.anothervalue = state
        super(B,self).__setstate__(superstate)

b=B()
with open('a','w') as f:
    cPickle.dump(b,f)


with open('a','r') as f:
    c=cPickle.load(f)
print(b.value)
print(b.anothervalue)

有关方法解析顺序(MRO)和super的更多信息,请参见this article。在

相关问题 更多 >

    热门问题