|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:编写一个描述符,使用文件来存储属性,属性的值会直接存储到pickle的文件中。如果属性被删除了,
文件也会被删除,属性的名字也会被注销
- import os
- import pickle
- class MyDes:
- saved = [ ]
- def __init__(self,name=None):
- self.name = name
- self.filename= self.name+ '.pkl'
- def __get__(self,instace,owner):
- if self.name not in saved:
- raise AttributeError('%s属性还没有赋值!'%self.name)
- with open(self.filename,'rb') as f:
- value = pickle.load(f)
- return value
- def __set__(self,instance,value):
- with open(self.filename,'wb') as f:
- pickle.dump(value,f)
- MyDes.saved.append(self.name)
- def __delete__(self,instance):
- os.remove(self.filename)
- MyDes.saved.remove(self.name)
- class C:
- x = MyDes('文件名')
复制代码
- >>> c = C()
- >>> c.x
- Traceback (most recent call last):
- File "<pyshell#4>", line 1, in <module>
- c.x
- File "D:\Python exercise\046魔法方法描述符Property.py", line 162, in __get__
- if self.name not in saved:
- NameError: global name 'saved' is not defined
- >>> c.x = 'asdffgh'
复制代码 |
|