簡體   English   中英

字典中的python 33 pickle類實例

[英]python 33 pickle class instance in dict

以下代碼

import pickle
class Member:
    global members
    try:
        with open('member dict.txt','rb') as f:
            members=pickle.load(f)
    except:
        members={}

    def __init__(self,name,info,new=True):
        if name in members and new:
            print('name is taken')
            self.name='Void'
            self.info={'Void':'Void'}
        else:
            self.info=info
            self.name=name
            members[name]=self
            if new:
                with open('member dict.txt','wb') as f:
                    pickle.dump(members,f)
    def __getstate__(self):
        return[self.name,self.info]
    def __setstate__(self,d):
        return Member(d[0],d[1],False)

然后在空閑狀態下(在第一個代碼中按f5之后)

PJ=member('P',{})

我關閉空閑,然后重新打開並輸入

members

它返回{}

我自己運行了代碼, 第二次運行程序時,錯誤是AttributeError: 'module' object has no attribute 'Member' 您正在嘗試在正確構建類之前釋放類。 為了擴展第一個注釋,將members放入類定義使您的代碼失敗的原因。 將其移到類定義下方,它將起作用。

class Member:
    def __init__(self, name, info, new=True):
        ...
    ...

try:
    with open('member dict.txt', 'rb') as f:
        members = pickle.load(f)
except Exception as e:
    members = {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM