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

  • 相关阅读:
    排序算法比较及其应用
    confluence wiki 安装
    hbase优缺点
    maven nexus私服搭建
    IntelliJ Idea 2017 免费激活方法
    presto-cli通过hive查询hdfs
    monit拉起服务
    MAC nginx代理设置
    kafka-manager安装
    flume从log4j收集日志输出到kafka
  • 原文地址:https://www.cnblogs.com/zhangsunan/p/6751888.html
Copyright © 2020-2023  润新知