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,供用户查看自己账号的锁定时间

时间: 2024-11-03 05:27:49

property练习的相关文章

python中的property

property(fget=None, fset=None, fdel=None, doc=None) -> property attribute fget is a function to be used for getting an attribute value, and likewise fset is a function for setting, and fdel a function for del'ing, an attribute. Typical use is to defi

Cannot read property &#39;Store&#39; of undefined nodejs express session

Express在使用mongodb的时候app配置出错!  "Cannot read property 'Store' of undefined" 原因主要是express版本4++问题 //settings.js module.exports={ cookieSecret:"xxxx", db:"dbname", host:"localhost", } //app.js var express = require("

uva 10526 - Intellectual Property(后缀数组)

题目链接:uva 10526 - Intellectual Property 题目大意:给定两个文本,问说下面一个文本中在哪些位置上抄袭了上面个一个文本的,输出n个抄袭位置(不足n个情况全部输出),按照长度优先输出,长度相同的输出位置靠前的. 注意:空格,回车都算一个字符:一段字符只能是抄袭上面的一部分,比如上:NSB*SB 下:NSB 答案:NSB. 解题思路:将两个文本连接在一起,中间用没有出现的字符分割,然后处理处后缀数组,根据height数组的性质,求出哪些位置匹配的长度不为0(注意匹配

webpack报错:Cannot assign to read only property &#39;exports&#39; of object &#39;#&lt;Object&gt;&#39;

这个倒霉错误在mac电脑上开发的时候非常顺利,可是用windows的时候就会报错. 百度查不到,google一查果然有. 原因是:The code above is ok. You can mix require and export. You can't mix import and module.exports. 也就是说,在webpack打包的时候,可以在js文件中混用require和export.但是不能混用import 以及module.exports. 于是查了一下代码,在自己的ma

JavaScript中的property和attribute的区别

时间: 2013-09-06 | 10:24 作者: 玉面小飞鱼 分类: DOM, js相关, 前端技术 2,222 次浏览 1. 定义 Property:属性,所有的HTML元素都由HTMLElement类型表示,HTMLElement类型直接继承自Element并添加了一些属性,添加的这些属性分别对应于每个HTML元素都有下面的这5个标准特性: id,title,lang,dir,className.DOM节点是一个对象,因此,他可以和其他的JavaScript对象一样添加自定义的属性以及方

staticmethod classmethod property方法

@staticmethod 静态方法 函数修饰符,用来修饰一个函数,类似于装饰器 class Dog(object): def __init__(self,name): self.name = name def eat(self,food): print('%s is eating %s'%(self.name,food)) d = Dog('二哈') d.eat('包子') #二哈 is eating 包子 eat()方法上面加上 @staticmethod class Dog(object)

Angular4 - Can&#39;t bind to &#39;ngModel&#39; since it isn&#39;t a known property of &#39;input&#39;.

用[(ngModel)]="xxx"双向绑定,如:控制台报错:Can't bind to 'ngModel' since it isn't a known property of 'input'.   解决办法:在app.module.ts文件中导入FormsModule Angular4 - Can't bind to 'ngModel' since it isn't a known property of 'input'.

Eclipse运行Maven命令时出现:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.问题解决

错误: -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match. 这个错误是由于Maven版本与当前IDE不兼容导致的,解决方法如下: 1.Maven降级. 2.升级IDE. 3.可以尝试这个方法:

转: 解决Setting property &#39;source&#39; to &#39;org.eclipse.jst.jee.server的问题

我发现这个问题上网搜索 ,找到的地址为:http://blog.csdn.net/z69183787/article/details/19911935 .但是他的标题上也有一个"转",我没找到原作者,暂时只把找到的原址标注一下吧 这是我于2013年9月4号晚遇到的问题,为了这个问题我一夜没睡!对于这个问题,我相信我的方法已经能帮90%的人解决了!当你用Eclipse运行web项目的时候,你就会看到控制台出现:WARNING: [SetPropertiesRule]{Server/Ser

javascript中attribute和property的区别详解

DOM元素的attribute和property很容易混倄在一起,分不清楚,两者是不同的东西,但是两者又联系紧密.很多新手朋友,也包括以前的我,经常会搞不清楚. attribute翻译成中文术语为"特性",property翻译成中文术语为"属性",从中文的字面意思来看,确实是有点区别了,先来说说attribute. attribute是一个特性节点,每个DOM元素都有一个对应的attributes属性来存放所有的attribute节点,attributes是一个类数