一:总结   1.什么是绑定到对象的方法,如何定义,如何调用,给谁用?有什么特性        只要是在类内部定义的,并且没有被任何装饰器修饰过的方法,都是绑定到对象的        绑定到对象,指的是:就给对象去用,   使用方式:对象.对象的绑定方法(),不用为self传值   特性:调用时会把对象本身当做第一个参数传给对象的绑定方法   2.什么是绑定到类的方法,如何定义,如何调用,给谁用?有什么特性        在类内部定义的,并且被装饰器@classmethod修饰过的方法,都是绑定到类的        绑定到对象,指的是:就给对象去用,   使用方式:对象.对象的绑定方法()   特性:调用时会把对象本身当做第一个参数传给对象的绑定方法   3.什么是解除绑定的函数,如何定义,如何调用,给谁用?有什么特性        既不与类绑定,也不与对象绑定,不与任何事物绑定   绑定的特性:自动传值(绑定到类的就是自动传类,绑定到对象的就自动传对象)   解除绑定的特性:不管是类还是对象来调用,都没有自动传值这么一说了   staticmethod就是相当于一个普通的工具包   4.什么是property,如何定义,如何使用,给谁用,什么情况下应该将一个属性定义成property,有什么好处?        property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值。        将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,        这种特性的使用方式遵循了统一访问的原则

二:  要求一:自定义用户信息数据结构,写入文件,然后读出内容,利用eval重新获取数据结构
with open('user.db','w') as write_file:write_file.write(str({"egon":{"password":"123",'status':False,'timeout':0},"alex":{"password":"456",'status':False,'timeout':0},}))with open('user.db','r') as read_file:data=read_file.read()d=eval(data)print(d['egon']['password'])print(d['egon']['status'])print(d['egon']['timeout'])

  往user.db文件写入并执行结果就是分别取到egon为key的value中的各个key的值
  要求二:定义用户类,定义属性db,执行obj.db可以拿到用户数据结构
class User:db_path='user.db'def __init__(self,username):self.username=username@propertydef db(self):data=open(self.db_path,'r').read()return eval(data)u=User('egon')
print(u.db['egon'])
print(u.db['egon']['password'])

  首先实例化一个对象u,传入egon参数执行property装饰过的函数,user.db中取值,取出字典中key为egon的value,
然后打印出来。继续会执行上步同样操作,会在以key为egon的value中{"password":"123",'status':False,'timeout':0}
取出key为password的值,然后打印出来("123")

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

class User:db_path='user.db'def __init__(self,name):self.name=name@propertydef db(self):with open(self.db_path,'r') as read_file:info=read_file.read()return eval(info)@db.setterdef db(self,value):with open(self.db_path,'w') as write_file:write_file.write(str(value))write_file.flush()def login(self):data=self.db           #@property装饰下的db函数,读取出user.db的文件内容,赋值给infoif data[self.name]['status']:           #对data字典中egon的key值下的status的key值进行判断,print('已经登录')                   #如果值为True,直接打印‘已经登录’如果值为Flase,进行if 判断return Trueif data[self.name]['timeout'] < time.time():            #如果data[self.name]['timeout']<time.time(),进入while循环count=0while count < 3:passwd=input('password>>: ')if not passwd:continueif passwd == data[self.name]['password']:           #输入passwd,进行判断:如果输入为空,继续循环data[self.name]['status']=Truedata[self.name]['timeout']=0self.db=databreakcount+=1else:data[self.name]['timeout']=time.time()+10self.db=dataelse:print('账号已经锁定10秒')u1=User('egon')     #先实例化一个对象
u1.login()          #执行def login(self)函数

u2=User('alex')
u2.login()

要求四:根据上述原理,编写退出登录方法(退出前要判断是否是登录状态),        自定义property,供用户查看自己账号的锁定时间
class User:db_path = 'user.db'def __init__(self, name):self.name = name@propertydef db(self):with open(self.db_path, 'r') as read_file:info = read_file.read()return eval(info)@db.setterdef db(self, value):with open(self.db_path, 'w') as write_file:write_file.write(str(value))write_file.flush()def login(self):import timedata = self.dbif data[self.name]['status']:print('已经登录')return Trueif data[self.name]['timeout'] < time.time():count = 0while count < 3:passwd = input('password>>: ')if not passwd: continueif passwd == data[self.name]['password']:data[self.name]['status'] = Truedata[self.name]['timeout'] = 0self.db = databreakcount += 1else:data[self.name]['timeout'] = time.time() + 10self.db = dataelse:print('账号已经锁定10秒')def quit(self):  # 用来退出登录data = self.dbif data[self.name]['status']:data[self.name]['status'] = Falsedata[self.name]['timeout'] = 0self.db = dataelse:print("未登录账户无法退出")@property  # 查看账户锁定时间def timeout(self):with open(self.db_path, 'r') as read_file_1:info1 = eval(read_file_1.read())time_out = info1[self.name]['timeout']print(time_out)u1 = User('egon')
u1.login()
u1.quit()
u1.timeout
u2 = User('alex')
u2.login()
u2.quit()

转载于:https://www.cnblogs.com/xuzheng940806/p/6748497.html

property练习相关推荐

  1. redisson get()数据报错,missing type id property ‘@class’

    redisson get()数据报错: com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Missing type id when ...

  2. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  3. kotlin Bean加载失败lateinit property has not been initialized

    Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creat ...

  4. python 创建只读的函数(@property的介绍与使用)

    @property 介绍 @property 是python 中的修饰符,将方法转为属性,可以直接通过方法名来访问,注意访问的时候后面不需要添加小括号,否则会报错,作用是将函数变为只读的,不能修改,否 ...

  5. Android 属性动画(Property Animation) ObjectAnimator的介绍

    先说下属性动画与视图动画的区别: 视图动画系统仅提供为 View 对象添加动画效果的功能,因此,如果您想为非 对象添加动画效果,则必须实现自己的代码才能做到.视图动画系统也存在一些限制,因为它仅公开 ...

  6. Android 属性动画(Property Animation) ValueAnimator 的介绍

    先说下属性动画与视图动画的区别: 视图动画系统仅提供为 View 对象添加动画效果的功能,因此,如果您想为非 对象添加动画效果,则必须实现自己的代码才能做到.视图动画系统也存在一些限制,因为它仅公开 ...

  7. java property异常_Java常见的异常和解决的办法

    Java程序设计中我们经常会遇到异常,遇到异常不要浮躁,找到问题的原因解决是很容易的.我们整理了一些异常和解决的方法供大家参考. 1.java.lang.IllegalStateException: ...

  8. 1-runtime的Method,IMP,Property,ivar

    基础定义 objc-750 的tar包 objc-private.h 定义 typedef struct objc_class *Class; typedef struct objc_object * ...

  9. python中的类的成员变量以及property函数

    1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用"类."来引用 ...

  10. 定义一个属性_Python property属性

    1. 什么是property属性 一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法 # ############### 定义 ###############class Foo: def ...

最新文章

  1. 如何弄一个IPHONE 添加到桌面的图标
  2. 04_05_06:设置线型风格(设置线型风格)、区域着色 (Shading Regions)、设置Spines
  3. Android 全局字体设置 例如楷体
  4. 输电线路巡检机器人PPT_“高空大师”来了!架空输电线路智能巡检机器人在宁波投运...
  5. 妈的我好像发现是哪出问题了
  6. 云厂商靠不靠谱?“国家级标准”鉴定结果来啦
  7. 智慧讲台必须支持的协议
  8. elementUI table 表格表头居中 颜色、内容居左
  9. 印尼商品期货交易监管局考虑对加密货币交易征税
  10. ubuntu14.04 LTS版本下安装配置gem5环境
  11. 刘宇凡:微博的那些人,那些事
  12. DinnerNow中的Work Flow应用(下) --- 订单流程
  13. Access根据出生日期计算年龄_从身份证号码计算年龄
  14. html给图片绝对定位,html相对定位和绝对定位
  15. 弘辽科技:端午节拼多多有优惠吗?力度如何?
  16. 好乐买总裁李树斌:10亿,突破技术瓶颈
  17. Visual Studio 安装编译SDK
  18. 阿里开源的27个项目,值得收藏!
  19. 5G NR标准 第3章 5G频谱
  20. 准备金率上调1个百分点意味着什么

热门文章

  1. 【matplotlib笔记】在图表中使用中文信息作为标签
  2. Python模拟浏览器向 CSDN发送POST请求的方法
  3. powershell自动化操作AD域、Exchange邮箱系列(3)—重要的模块/API介绍Get-Aduser Get-Mailbox
  4. 期货品种产业链图表_化工
  5. 十年数据分析经验,总结出这三类分析工具最好用
  6. 化工企业数据分析报表系统项目之销售模块分析
  7. 拦截器CacheInterceptor
  8. hive 把mysql语句执行_Hive SQL 语句的执行顺序
  9. python里的英文歌叫什么_一首英文歌名最后是onshould
  10. 有源rc电压放大器实验报告_为什么将放大器装在示波器探头前端?