0

次のコード

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

戻ります{}

4

1 に答える 1

1

あなたのコードを自分で実行しましたが、プログラムを2回目に実行すると、エラーはAttributeError: 'module' object has no attribute 'Member'. クラスが適切に構築される前に、クラスを unpickle しようとしています。最初のコメントを拡張すると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 = {}
于 2013-04-08T17:38:26.740 に答える