zoukankan      html  css  js  c++  java
  • 25 练习题:super方法 封装 property装饰器 反射

    # 作业1
    class Authentic:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def register(self):
            print('register')
    
        def login(self):
            print('login')
    
    
    l = [('登录', 'login'), ('注册', 'register')]
    # 循环这个列表
    # 显示 序号 用户要做的操作
    # 用户输入序号
    # 你通过序号找到对应的login或者register方法
    # 先实例化
    # 调用对应的方法,完成登录或者注册功能
    import sys
    for i in enumerate(l):
        print(i[0] + 1, i[1][0])
    while True:
        mode = input("Pls input ur operation(id num)>>>")
        if int(mode) > 1 or int(mode) < 2 :
            break
        print('Illegal input.')
    User = Authentic('alex', '83')
    mode = int(mode)
    if hasattr(User, l[mode-1][1]):
        if callable(getattr(User, l[mode-1][1])):
            getattr(User, l[mode-1][1])()
    
    
    
    # 作业2
    class User:
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
        def eat(self):
            print('eat')
    
        def sleep(self):
            print('sleep')
    # 用户输入用户名密码性别
    # 实例化对象
    # 用户任意输入内容 : 不能用异常处理
    # 如果输入的是属性名 打印属性值
    # 如果输入的是方法名 调用fangfa
    # 如果输入的什么都不是 不做操作
    user_input = input('Pls input ur name, age, gender>>>')
    user_input = user_input.strip().split(' ')
    user_obj = User(user_input[0], user_input[1], user_input[2])
    choose = input('Pls input ur mode>>>')
    if hasattr(user_obj, choose):
        if callable(getattr(user_obj, choose)):
            getattr(user_obj, choose)()
        else: print(getattr(user_obj, choose))
    
    
    
    # 作业3
    # 注册之后,重启所有的用户丢失
    # 一次执行的注册行为,在之后所有执行中都能够正常登录
    # 两个登录程序和面向对象的内容整理在一起,两个都要明白,都要记住
    class User:
        def __init__(self, name, pwd):
            self.name = name
            self.pwd = pwd
    
    
    class Account:
        def __init__(self):
            # 用户列表,数据格式:[user对象,user对象,user对象]
            self.user_list = []
    
        def login(self):
            """
            用户登录,输入用户名和密码然后去self.user_list中校验用户合法性
            """
            for count in range(3):
                if not self.user_list:
                    print('Pls register first.')
                    return
                username = input('username:')
                password = input('password:')
                for i in self.user_list:
                    if username == i.name and password == i.pwd:
                        print('Login success.')
                        return
                    print('Incorrect account or password.')
    
        def register(self):
            """
            用户注册,没注册一个用户就创建一个user对象,然后添加到self.user_list中,表示注册成功。
            """
            while True:
                while True:
                    username = input('username:')
                    password = input('password:')
                    password_again = input('password again:')
                    if password == password_again:
                        break
                    print('Entered passwords differ.')
                if not self.user_list:
                    new_user = User(username, password)
                    self.user_list.append(new_user)
                    return
                for i in self.user_list:
                    if username != i.name:
                        new_user = User(username, password)
                        self.user_list.append(new_user)
                        return
                    print('This username has been registered.')
    
        def run(self):
            """
            主程序
            """
            mode_list = ['login', 'register']
            while True:
                while True:
                    for i in enumerate(mode_list):
                        print(i[0] + 1, i[1])
                    choose = input('Pls choose ur mode(input mode num, input q to quit) >>>')
                    if choose.upper() == 'Q':
                        return
                    elif choose.isdecimal():
                        if int(choose) == 1 or int(choose) == 2:
                            break
                    print('Illegal input.')
                choose = int(choose)
                if hasattr(self, mode_list[choose - 1]):
                    if callable(getattr(self, mode_list[choose - 1])):
                        getattr(self, mode_list[choose - 1])()
    
    
    if __name__ == '__main__':
        obj = Account()
        obj.run()
    
    
    
    # 作业4
    # 写一个自定义模块,里面有你自己实现的mypickle和myjson,我只需要给你传递一个参数 'pickle'还是'json'
    import pickle
    import json
    
    
    class My_pickle:
        def __init__(self, path):
            self.path = path
            self.__count = 1
    
        def my_dump(self, obj):
            with open(self.path, mode='ab') as file_handler:
                pickle.dump(obj, file_handler)
    
        def my_load(self):
            with open(self.path, mode='rb') as file_handler:
                for i in range(self.__count):
                    ret = pickle.load(file_handler)
            self.__count += 1
            return ret
    
    
    class My_json:
        def __init__(self, path):
            self.path = path
    
        def my_dump(self, element):
            with open(self.path, encoding='utf-8', mode='a') as file_handler:
                json.dump(element, file_handler)
    
        def my_load(self):
            with open(self.path, encoding='utf-8', mode='r') as file_handler:
                ret = json.load(file_handler)
                return ret
    
    
    import sys
    
    test = (1, 2, 3)
    path = input('Input path >>>')
    mode = input('json or pickle? >>>')
    mode = 'My_' + mode
    if hasattr(sys.modules['__main__'], mode):
        if callable(getattr(sys.modules['__main__'], mode)):
            obj = getattr(sys.modules['__main__'], mode)(path)
            obj.my_dump(test)
    
  • 相关阅读:
    Webpack 入门指迷--转载(题叶)
    浏览器工作原理理解
    Knockout.js初体验
    node.js链接mysql
    2020年度春季学习总结--第二周
    Python 爬取 热词并进行分类数据分析-[安全性改造]
    以 CheatEngine 为例的六个质量属性
    2020年度春季学习总结--第一周
    软件架构师如何工作-个人见解
    Steam 游戏 《Crashlands(崩溃大陆)》修改器制作-[先使用CE写,之后有时间的话改用CheatMaker](2020年寒假小目标12)
  • 原文地址:https://www.cnblogs.com/raygor/p/13374110.html
Copyright © 2011-2022 走看看