property练习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了property练习相关的知识,希望对你有一定的参考价值。

作业一:总结
1.什么是绑定到对象的方法,如何定义,如何调用,给谁用?有什么特性

定义:只要是在类内部定义的,并且没有被任何装饰器修饰过的方法,都是绑定到对象的

调用:对象.对象的绑定方法(),不用为self传值

特性:绑定方法唯一绑定一个对象,obj.func()会把obj传给func的第一个参数。

 

2.什么是绑定到类的方法,如何定义,如何调用,给谁用?有什么特性

定义:在类内部定义的,并且被装饰器@classmethod修饰过的方法,都是绑定到类的

调用:类.方法名()

特性:调用时会把对象本身当做第一个参数传给对象的绑定方法

 

3.什么是解除绑定的函数,如何定义,如何调用,给谁用?有什么特性

定义:既不与类绑定,也不与对象绑定,不与任何事物绑定

调用:类名.函数()

特性:都没有自动传值

 

4.什么是property,如何定义,如何使用,给谁用,什么情况下应该将一个属性定义成property,有什么好处?

定义:property可以作为一个装饰器用来封装对象的数据属性和类的函数属性

使用:@property

情况:类的函数名是名词的时候和不想让外部直接操作我的对象的时候

好处:对象在使用被装饰的方法时,不用管运行的逻辑,只要通过接口调用就好了
 

作业二:
要求一:自定义用户信息数据结构,写入文件,然后读出内容,利用eval重新获取数据结构

 1 with open(user.db,w) as write_file:
 2 
 3     write_file.write(str({
 4 
 5         "egon":{"password":"123",status:False,timeout:0},
 6         "alex":{"password":"456",status:False,timeout:0},
 7         }))#加入两个用户的详细信息,以字典形式储存
 8  
 9 with open(user.db,r) as read_file:
10     data=read_file.read()
11     d=eval(data)#转化为字典
12     print(d[egon][password])
13     print(d[egon][status])
14     print(d[egon][timeout])

 

 
 
要求二:定义用户类,定义属性db,执行obj.db可以拿到用户数据结构
 1 class User:
 2     db_path=user.db
 3     def __init__(self,username):
 4         self.username=username
 5     @property
 6     def db(self):
 7         data=open(self.db_path,r).read()
 8         return eval(data)
 9  
10 u=User(egon)
11 print(u.db[egon])
12 print(u.db[egon][password])

 

要求三:分析下述代码的执行流程

 1 class User:
 2     db_path=user.db
 3     def __init__(self,name):#实列化
 4         self.name=name
 5     @property
 6     def db(self):
 7         with open(self.db_path,r) as read_file:
 8             info=read_file.read()
 9             return eval(info)
10     @db.setter
11     def db(self,value):
12         with open(self.db_path,w) as write_file:
13             write_file.write(str(value))
14             write_file.flush()
15 
16     def login(self):
17         data=self.db
18         if data[self.name][status]:
19             print(已经登录)
20             return True
21         if data[self.name][timeout] < time.time():
22             count=0
23             while count < 3:
24                 passwd=input(password>>: )
25                 if not passwd:continue
26                 if passwd == data[self.name][password]:
27                     data[self.name][status]=True
28                     data[self.name][timeout]=0
29                     self.db=data
30                     break
31                 count+=1
32             else:
33                 data[self.name][timeout]=time.time()+10
34                 self.db=data
35         else:
36             print(账号已经锁定10秒)
37 
38 u1=User(egon)
39 u1.login()
40 
41 u2=User(alex)
42 u2.login()

1.
用户实例化
 2.用户登录,先到@property下定义的函数中找文件,以字典的形式返回
 3.判断如果用户的状态是True,返回"已经登陆"
 4.如果没有登录,判断用户的时间是否小于当前的时间戳
    如果小于
        判断是否错误登录大于三次
            如果小于
                用户输入密码,错误一次继续输入,三次后锁定
                如果密码正确,把状态改为True,时间为0,执行@db.setter下的代码,把数据重新写入原来的文件   
    如果大于
        输出账号已经锁定10

 

要求四:根据上述原理,编写退出登录方法(退出前要判断是否是登录状态),自定义property,供用户查看自己账号的锁定时间

 

以上是关于property练习的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 快速开发 代码块

Xcode 快速开发 代码块 快捷键

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

代码片段

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段