鱼C论坛

 找回密码
 立即注册
查看: 613|回复: 2

关于泡菜的读取问题,py3.6

[复制链接]
发表于 2018-7-26 23:00:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import os
import pickle

class MyDes:
    saved = []      #保存属性到列表

    def __init__(self,name=None):
        self.name = name
        self.filename = str(self.name) + '.pkl'

    def __get__(self,instance,owner):
        if self.name not in MyDes.saved:
            raise AttributeError('%s 属性嗨没有赋值!'%self.name)

        with open(self.filename,'rb') as f:     #获取时 只读 二进制
            value = pickle.load(f)      #加载 rb模式 打开的文件

        return value    #读出其中的内容

    def __set__(self,instance,value):
        with open(self.filename,'ab') as f:     #设置时 末尾写入 二级制模式                  这里用末尾写入  如果写入多个属性 但是始终只能读出第一个属性
            MyDes.saved.append(self.name)   #属性存储到对应的列表中
            pickle.dump(value,f)            #荡进去,把文件腌制起来

    def __delete__(self,instance):
        
        MyDes.saved.remove(self.name)       #删除列表中的属性
        os.remove(self.filename)            #删除制定的文件

class Test:
    x = MyDes()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-7-27 00:08:47 | 显示全部楼层
因为你的__get__就返回一个属性,而__set__是设置属性,利用__get__返回调用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-27 19:59:58 | 显示全部楼层
故梦L 发表于 2018-7-27 00:08
因为你的__get__就返回一个属性,而__set__是设置属性,利用__get__返回调用

感谢老师,请问我应该怎么改 才可以输出全部的内容呢? 或者我想输出第5个应该怎么输出呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-1 01:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表