首页 > 代码库 > 面向对象练习2

面向对象练习2

题目一:总结

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

类内定义的函数,不经装饰器装饰,被实例化对象调用,会默认传入一个self参数,对象将会传递给self;

定义方式比较普通‘def 函数名(self):’;

调用方式‘对象.函数名()’;

类和对象都可以调用,被对象调用称为绑定方法。

 

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

类内部定义的函数,经过@classmethod装饰器装饰,会默认传入一个cls参数,调用该方法的类将传递给cls;

定义方式‘def 函数名(cls):’;

调用方式‘类名.函数名()’;

主要是给类调用,对象也可以强行调用,但是还算是对象所属类的调用,所以一般不推荐。

 

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

同样是类内部定义的函数,经过@staticmethod装饰器装饰,没有默认传入的参数;

定义方式‘def 函数名()’;

调用方式‘类名.函数名()’;

仅提供给类调用,不考虑给对象使用,可以比作类的另外一种实例化方式。

 

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

property译为特征,将有变量特征的函数进行@property装饰,直接可以通过函数名调用;

可以将隐藏属性定义函数形成借口,便于调用;

调用方便,直接通过‘对象.函数名’调用。

 

以上题目详细参考http://www.cnblogs.com/xuyaping/p/6723862.html中静态方法和类方法的总结

 

题目二:

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

with open(‘user.db‘,‘w‘) as write_file:		#创建并以写入的方式打开一个文件user.db
    write_file.write(str({			#在user.db中加入两个用户信息以字典的方式储存
        "egon":{"password":"123",‘status‘:False,‘timeout‘:0},
        "alex":{"password":"456",‘status‘:False,‘timeout‘:0},
        }))

with open(‘user.db‘,‘r‘) as read_file:		#以只读的方式打开一个文件user.db
    data=http://www.mamicode.com/read_file.read()			#读取user.db中的数据						>

 

二:定义用户类,定义属性db,执行obj.db可以拿到用户数据结构

class User: 					#定义User类
    db_path=‘user.db‘
    def __init__(self,username): 		#在实例化User类时,传入Username参数的值
        self.username=username
    @property					#将db()方法作为属性,让用户调用
    def db(self):
        data=http://www.mamicode.com/open(self.db_path,‘r‘).read()	#以只读的方式打开文件user.db>

 

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

import time
class User:
    db_path = ‘user.db‘
    def __init__(self, name):
        self.name = name
    @property
    def db(self):
        with open(self.db_path, ‘r‘) as read_file:
            info = read_file.read()
            return eval(info)
    @db.setter
    def db(self, value):
        with open(self.db_path, ‘w‘) as write_file:
            write_file.write(str(value))
            write_file.flush()

def login(self):  # 3、self接收对象u1
    data = http://www.mamicode.com/self.db  # 4、u1调用db属性,寻找实例化中的db属性,返回值为‘user.db’文件中的数据结构,并赋值给date>

 

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

import time
class User:
    db_path = ‘user.db‘
    def __init__(self, name):
        self.name = name
    @property
    def db(self):
        with open(self.db_path, ‘r‘) as read_file:
            info = read_file.read()
            return eval(info)
    @db.setter
    def db(self, value):
        with open(self.db_path, ‘w‘) as write_file:
            write_file.write(str(value))
            write_file.flush()
    @property
    def check_lock_time(self):
        with open(self.db_path, ‘r‘) as read_file:
            info = read_file.read()
            info = eval(info)
            if info[self.name][‘timeout‘] > time.time():
                time_diff = info[self.name][‘timeout‘] - time.time()
                print(‘您的账号剩余锁定时间%s秒‘ % int(time_diff))
            else:
                print(‘您的账号未被锁定‘)

    def login(self):
        data = http://www.mamicode.com/self.db>

  

面向对象练习2