首页 > 代码库 > Property Exercise

Property Exercise

要求一:自定义用户信息数据结构,写入文件,然后读出内容,利用eval重新获取数据结构
 3 with open(‘user.db‘,‘w‘) as write_file:#创建并以写入的方式打开一个文件user.db
 4     write_file.write(str({
 5         "egon":{"password":"123",‘status‘:False,‘timeout‘:0},
 6         "alex":{"password":"456",‘status‘:False,‘timeout‘:0},
 7         }))#在user.db中加入两个用户信息以字典的方式储存
 8 
 9 with open(‘user.db‘,‘r‘) as read_file:#以只读的方式打开一个文件user.db
10     data=http://www.mamicode.com/read_file.read()#读取user.db中的数据>

求二:定义用户类,定义属性db,执行obj.db可以拿到用户数据结构
 3 class User: #定义User类
 4     db_path=‘user.db‘
 5     def __init__(self,username): #在实例化User类时,传入Username参数的值
 6         self.username=username
 7     @property#将db()方法作为属性,让用户调用
 8     def db(self):
 9         data=http://www.mamicode.com/open(self.db_path,‘r‘).read()#以只读的方式打开文件user.db>

求三:分析下述代码的执行流程
 3 import time
 4 class User:#定义User类
 5     db_path=‘user.db‘
 6     def __init__(self,name): #在实例化User类时,传入name参数的值
 7         self.name=name
 8     @property#将db()方法作为属性,让用户调用,同时产生db.setter和db.del方法
 9     def db(self):
10         with open(self.db_path,‘r‘) as read_file:#当调用db方法时,打开文件user.db
11             info=read_file.read()
12             return eval(info)#以字典的方式返回user.db中的用户信息
13     @db.setter#在对db属性进行修改操作的时候,调用此方法
14     def db(self,value):
15         with open(self.db_path,‘w‘) as write_file:#创建并打开一个文件user.db
16             write_file.write(str(value))#在文件中写入db属性得到的值
17             write_file.flush()#刷新文件的缓冲区域,让数据立刻写入文件
18     def login(self): #定义login方法
19         data=http://www.mamicode.com/self.db#data得到db方法(现在被@property修饰过的属性)返回的user.db中的数据"egon login:")
42 u1.login()#u1调用login的方法



四:根据上述原理,编写退出登录方法(退出前要判断是否是登录状态),自定义property,供用户查看自己账号的锁定时间
 3 import time
 4 class User:#定义User类
 5     db_path=‘user.db‘
 6     def __init__(self,name): #在实例化User类时,传入name参数的值
 7         self.name=name
 8         print("%s Login:"%self.name)
 9     @property#将db()方法作为属性,让用户调用,同时产生db.setter和db.del方法
10     def db(self):
11         with open(self.db_path,‘r‘) as read_file:#当调用db方法时,打开文件user.db
12             info=read_file.read()
13             return eval(info)#以字典的方式返回user.db中的用户信息
14     @db.setter#在对db属性进行修改操作的时候,调用此方法
15     def db(self,value):
16         with open(self.db_path,‘w‘) as write_file:#创建并打开一个文件user.db
17             write_file.write(str(value))#在文件中写入db属性得到的值
18             write_file.flush()#刷新文件的缓冲区域,让数据立刻写入文件
19     @property
20     def UserLockTime(self):
21         return int(self.db[self.name]["timeout"]-time.time())
22     def loginOut(self):
23         data = http://www.mamicode.com/self.db"正在登出.....")
26             data[self.name][‘status‘] = False
27             self.db = data
28             time.sleep(2)
29             print(self.name,"登出成功!")
30         else:
31             print(self.name,"并没有登陆")
32     def login(self): #定义login方法
33         data=http://www.mamicode.com/self.db#data得到db方法(现在被@property修饰过的属性)返回的user.db中的数据"欢迎%s登陆,马上为您进行登出服务"%self.name)
47                     time.sleep(3)
48                     break
49                 count+=1#只允许用户输入三次错误的机会
50             else:
51                 data[self.name][‘timeout‘]=time.time()+180#如果三次输入错误,那么该用户将被锁定180秒
52                 self.db=data#将改写过的值重新调用db.setter方法存入user.db文件中,在用户看来就是对db属性进行了重新的赋值操作
53         else:#如果判断用户的timeout大于1970年到现在的值
54             print(‘账号已经锁定180秒,剩余%s秒‘%self.UserLockTime)
55 u1=User(‘egon‘) #实例化u1传入name,egon
56 u1.login()#u1调用login的方法
57 u1.loginOut()#u1调用loginOut方法
58 u2=User(‘alex‘)
59 u2.login()






Property Exercise