鱼C论坛

 找回密码
 立即注册
查看: 2084|回复: 3

[已解决]pickle 的dump的一点问题

[复制链接]
发表于 2022-4-22 19:54:56 | 显示全部楼层 |阅读模式

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

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

x
各位大神:
关于下面这段程序室第46讲的作业,但是我一执行,test.x = 123, 就报错: 我看了下 word,pickle_file , 都没啥问题,,所以是哪出错了啊。。
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    test.y = 123
  File "C:\Users\zhuzj\Desktop\python\test\老教材\test.py", line 20, in __set__
    self.record()
  File "C:\Users\zhuzj\Desktop\python\test\老教材\test.py", line 33, in record
    p.dump( self.words, self.pickle_file)
AttributeError: type object 'Path' has no attribute 'dump'



import pickle
from pathlib import Path as p
import time as t

class MyDes:
    ##初始化键值对,对应的变量 与值利用字典的属性链接起来,初始值为None
    def __init__(self, name):
        self.name = name
        self.dictt = {}
        self.dictt[self.name] = None

    def __get__(self, inst, owner):
        self.time = t.ctime()
        self.record()
        return self.dictt[self.name]
   
    def __set__(self, inst, value):
        self.time = t.ctime()
        self.dictt[self.name] = value
        self.record()

    def record(self):
        self.path = r'C:\Users\zhuzj\Desktop\python\test\老教材' + f'\{self.name}.pkl'
        self.words = f'{self.name} 变量于北京时间 {self.time}被读取, {self.name} = {self.dictt[self.name]}\n'
        with open(self.path , 'wb') as self.pickle_file:
            p.dump(self.words, self.pickle_file)
        
        
class Test:
    x = MyDes('x')
    y = MyDes('y')

test = Test()
最佳答案
2022-4-22 20:10:45
import pickle
from pathlib import Path as p
import time as t

class MyDes:
    ##初始化键值对,对应的变量 与值利用字典的属性链接起来,初始值为None
    def __init__(self, name):
        self.name = name
        self.dictt = {}
        self.dictt[self.name] = None

    def __get__(self, inst, owner):
        self.time = t.ctime()
        self.record()
        return self.dictt[self.name]
   
    def __set__(self, inst, value):
        self.time = t.ctime()
        self.dictt[self.name] = value
        self.record()

    def record(self):
        self.path = r'C:\Users\zhuzj\Desktop\python\test\老教材' + f'\{self.name}.pkl'
        self.words = f'{self.name} 变量于北京时间 {self.time}被读取, {self.name} = {self.dictt[self.name]}\n'
        with open(self.path , 'wb') as self.pickle_file:
            pickle.dump(self.words, self.pickle_file)                   # 这里改成 pickle
        
        
class Test:
    x = MyDes('x')
    y = MyDes('y')

test = Test()
test.x = 123
捕获.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-22 19:55:58 | 显示全部楼层
'''
0. 将拥有特殊方法(包括get, set ,delete)的类的实例 定义给其他类的属性,这个属性称之为描述符
1. __get__ (self, inst ,owner), __set__ (self , inst , value ), __delete__ (self, inst)
2. test.a
3. 0 , 先init , set , get
4. 9

'''
#动动手2


#动动手1
from pathlib import Path as p
import time as t

class Record:
    #初始化键值对,对应的变量 与值利用字典的属性链接起来
    def __init__(self, value = 0 , name = ''):
        self.dictt = {}
        self.name = name
        self.dictt[self.name] = value
    #访问属性
    def __get__(self, inst , owner):
        self.time = t.ctime()
        self.recordFile()
        return self.dictt[self.name]

    #更改属性值
    def __set__(self, inst , value):
        self.time = t.ctime()
        self.dictt[self.name] = value
        self.recordFile()
        

    #生成保存日志
    def recordFile(self):
        with open(r'C:/Users/zhuzj/Desktop/python/test/老教材/record.txt','a+') as self.file:
            self.words = f' {self.name} 变量于北京时间 {self.time}被读取, {self.name} = {self.dictt[self.name]}\n '
            self.file.write(self.words)
            
class Test:
    x = Record(10, 'x')
    y = Record(8.8, 'y')

test = Test()
test.x
test.y
test.x = 123
test.x = 1.23
test.y = 'i love fishc'

#动动手0
class MyDes:
    def __init__(self, value = 0 , name = ''):
        self.dictt = {}
        self.value = value
        self.name = name
        self.dictt[self.name] = self.value
        
    def __get__(self, inst , owner):
        print(f'正在获取变量:{self.name}')
        return self.dictt[self.name]
    def __set__(self, inst , value):
        print(f'正在修改变量:{self.name}')
        self.dictt[self.name] = value
    def __delete__(self , inst):
        print(f'正在删除变量:{self.name}\n哦这个变量没法删除 ')
        
class Test:
    x = MyDes(10 , 'x')
test = Test()
test.x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-22 20:10:45 | 显示全部楼层    本楼为最佳答案   
import pickle
from pathlib import Path as p
import time as t

class MyDes:
    ##初始化键值对,对应的变量 与值利用字典的属性链接起来,初始值为None
    def __init__(self, name):
        self.name = name
        self.dictt = {}
        self.dictt[self.name] = None

    def __get__(self, inst, owner):
        self.time = t.ctime()
        self.record()
        return self.dictt[self.name]
   
    def __set__(self, inst, value):
        self.time = t.ctime()
        self.dictt[self.name] = value
        self.record()

    def record(self):
        self.path = r'C:\Users\zhuzj\Desktop\python\test\老教材' + f'\{self.name}.pkl'
        self.words = f'{self.name} 变量于北京时间 {self.time}被读取, {self.name} = {self.dictt[self.name]}\n'
        with open(self.path , 'wb') as self.pickle_file:
            pickle.dump(self.words, self.pickle_file)                   # 这里改成 pickle
        
        
class Test:
    x = MyDes('x')
    y = MyDes('y')

test = Test()
test.x = 123
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-22 21:31:56 | 显示全部楼层

自己好似一个傻子。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 16:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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