Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 在Python中修改类实例_Class_Python 3.x_Shelve - Fatal编程技术网

Class 在Python中修改类实例

Class 在Python中修改类实例,class,python-3.x,shelve,Class,Python 3.x,Shelve,我有一个小班: import pickle import shelve class Base: def __init__(self, userid, username, pic_list=[]): self.userid=userid self.pic_list=pic_list self.username_list=[username] self.username=self.username_list[-1]

我有一个小班:

import pickle
import shelve

class Base:

    def __init__(self, userid, username, pic_list=[]):
        self.userid=userid
        self.pic_list=pic_list
        self.username_list=[username]
        self.username=self.username_list[-1]

    def pic_add(self, pic):
        self.pic_list.append(pic)

if __name__ == '__main__':

    path="D:/"

    db = shelve.open(path+'test_base')

    db['111']=Base('111','111name',[4,5,6])
    db['111'].pic_add('123dsf')

    print (sorted(db['111'].pic_list))

    db.close()
我想将
123dsf
附加到类实例“111”的
picu列表中。但我得到的结果是:

[4, 5, 6]
[Finished in 0.3s]
我想要接收[4,5,6,123dsf]。我做错了什么

塔克斯

提示-这是一个搁置模块语法,因为添加“y”很好:

db['111']=Base('111','111name',[4,5,6])
db['111'].pic_add('123dsf')
Base.pic_add(db['111'],'123dsf')

y=Base('222','222name',[7,8,9])
y.pic_add('pis')

print (y.pic_list)

print (sorted(db['111'].pic_list))
结果是:

[7, 8, 9, 'pis']
[4, 5, 6]
[Finished in 0.4s]

有两种方法可以做到这一点——如文件中所建议的:

1.设置
写回
标志:

db = shelve.open(path+'test_base', writeback=True)
允许您就地修改对象:

db['111'].pic_add('123dsf')
2.检索存储对象的副本,然后对副本进行变异,然后将副本存储回:

cpy = db['111']
cpy.pic_add('123dsf')
db['111'] = cpy

您是否尝试过文档中建议的
db=shelve.open(path+'test\u base',writeback=True)
:Thanx-您的答案和链接非常有用,请-用它来回答-我会确认的。很高兴我能提供帮助。发布了一个答案。。。