老男孩python全栈s21day22作业(反射)

  1. 请使用面向对象实现栈(后进先出)

    class Stack(object):
        def __init__(self):
            self.data_list = []
    
        def push(self, val):
            self.data_list.append(val)
    
        def pop(self):
            self.data_list.pop()
    
  2. 请是用面向对象实现队列(先进先出)

    class Stack(object):
        def __init__(self):
            self.data_list = []
    
        def push(self, val):
            self.data_list.append(val)
    
        def pop(self):
            self.data_list.pop(0)
    
  3. 如何实现一个可迭代对象?

    在类中实现`__iter__`方法且返回一个迭代器
    
  4. 看代码写结果

    class Foo(object):
    
        def __init__(self):
            self.name = '武沛齐'
            self.age = 100
    
    
    obj = Foo()
    setattr(Foo, 'email', 'wupeiqi@xx.com')
    
    v1 = getattr(obj, 'email')
    v2 = getattr(Foo, 'email')
    
    print(v1, v2)
    #wupeiqi@xx.com wupeiqi@xx.com
    
  5. 请补充代码(提:循环的列表过程中如果删除列表元素,会影响后续的循环,推荐:可以尝试从后向前找)

    li = ['李杰','女神','金鑫','武沛齐']
    
    name = input('请输入要删除的姓氏:') # 如输入“李”,则删除所有姓李的人。
    # 请补充代码
    
    li = ['李杰','女神','金鑫','武沛齐']
    
    name = input('请输入要删除的姓氏:') # 如输入“李”,则删除所有姓李的人。
    # 请补充代码
    new_li = []
    for item  in range(len(li)):
        if li[item][0] != name:
            new_li.append(li[item])
    print(new_li)
    
    li = ['李杰','女神','金鑫','武沛齐']
    
    name = input('请输入要删除的姓氏:') # 如输入“李”,则删除所有姓李的人。
    # 请补充代码
    
    for item in range(len(li)-1,-1,-1):
        if li[item].startswith("李"):
            del li[item]
    print(li)
    
  6. 有如下字典,请删除指定数据。

    class User(object):
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    info = [User('武沛齐', 19), User('李杰', 73), User('景女神', 16)]
    
    name = input('请输入要删除的用户姓名:')
    # 请补充代码将指定用户对象在info列表中删除。
    
    class User(object):
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    info = [User('武沛齐', 19), User('李杰', 73), User('景女神', 16)]
    print(info)
    name = input('请输入要删除的用户姓名:')
    # 请补充代码将指定用户对象在info列表中删除。
    new_info = []
    for i in range(len(info)):
        if info[i].name != name:
            new_info.append(info[i])
    print(new_info)
    
    class User(object):
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    info = [User('武沛齐', 19), User('李杰', 73), User('景女神', 16)]
    print(info)
    name = input('请输入要删除的用户姓名:')
    # 请补充代码将指定用户对象在info列表中删除。
    for i in range(len(info)-1,-1,-1):
        if info[i] .name ==name:
            del info[i]
    print(info)
    
  7. 补充代码实现:校园管理系统。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    
    class User(object):
        def __init__(self, name, email, age):
            self.name = name
            self.email = email
            self.age = age
    
        def __str__(self):
            return self.name
    
    
    class School(object):
        """学校"""
    
        def __init__(self):
            # 员工字典,格式为:{"销售部": [用户对象,用户对象,] }
            self.user_dict = {}
    
        def invite(self, department, user_object):
            """
            招聘,到用户信息之后,将用户按照指定结构添加到 user_dict结构中。
            :param department: 部门名称,字符串类型。
            :param user_object: 用户对象,包含用户信息。
            :return:
            """
            pass
    
        def dimission(self, username, department=None):
            """
            离职,讲用户在员工字典中移除。
            :param username: 员工姓名
            :param department: 部门名称,如果未指定部门名称,则遍历找到所有员工信息,并将在员工字典中移除。
            :return:
            """
            pass
    
        def run(self):
            """
            主程序
            :return:
            """
            pass
    
    
    if __name__ == '__main__':
        obj = School()
        obj.run()
        
    
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    
    class User(object):
        def __init__(self, name, email, age):
            self.name = name
            self.email = email
            self.age = age
    
        def __str__(self):
            return self.name
    
    class School(object):
        """学校"""
    
        def __init__(self):
            # 员工字典,格式为:{"销售部": [用户对象,用户对象,] }
            self.user_dict = {'销售部':[]}
    
        def invite(self, department, user_object):
            """
            招聘,到用户信息之后,将用户按照指定结构添加到 user_dict结构中。
            :param department: 部门名称,字符串类型。
            :param user_object: 用户对象,包含用户信息。
            :return:
            """
            self.user_dict[department].append(user_object)
    
        def dimission(self, username, department=None):
            """
            离职,讲用户在员工字典中移除。
            :param username: 员工姓名
            :param department: 部门名称,如果未指定部门名称,则遍历找到所有员工信息,并将在员工字典中移除。
            :return:
            """
            new_user_dict = {'销售部':[]}
            for i in self.user_dict['销售部']:
                # print(i.name)
                if i.name != username:
                    new_user_dict['销售部'].append(i)
            self.user_dict = new_user_dict
    
        def run(self):
            """
            主程序
            :return:
            """
            while True:
    
                # choice_dic = {'1':self.invite,'2':self.dimission}
                choice = input("请输入选择(1,销售部招聘。2,离职)")
                if choice =='1':
                    name = input("请输入姓名:")
                    email = input("请输入邮箱:")
                    age = input("请输入年龄:")
                    user_object = User(name,email,age)
                    # choice_dic[choice]('销售部',user_object)
                    self.invite('销售部',user_object)
                    print("%s已加入到面试列表中,面试列表如下:"%(user_object))
                    print(self.user_dict)
                else:
                    name = input("请输入离职人员姓名:")
                    # email = input("请输入邮箱:")
                    # age = input("请输入年龄:")
                    # user_object = User(name, email, age)
                    # choice_dic[choice]('销售部', name)
                    self.dimission(name)
                    print("%s已离职!当前面试列表如下:"%(name))
                    print(self.user_dict)
    
    
    
    if __name__ == '__main__':
        obj = School()
        obj.run()
    
    
  8. 请编写网站实现如下功能。
    需求:

    • 实现 MIDDLEWARE_CLASSES 中的所有类,并约束每个类中必须有process方法。

    • 用户访问时,使用importlib和反射 让 MIDDLEWARE_CLASSES 中的每个类对 login、logout、index 方法的返回值进行包装,最终让用户看到包装后的结果。
      如:

      • 用户访问 : http://127.0.0.1:8000/login/
        页面显示: 【csrf】【auth】【sessionx】 登录 【session】 【auth】 【csrf】

      • 用户访问 : http://127.0.0.1:8000/index/
        页面显示: 【csrf】【auth】【session】 登录 【session】 【auth】 【csrf】

        即:每个类都是对view中返回返回值的内容进行包装。

    MIDDLEWARE_CLASSES = [
        'utils.session.SessionMiddleware',
        'utils.auth.AuthMiddleware',
        'utils.csrf.CrsfMiddleware',
    ]
    
    from wsgiref.simple_server import make_server
    
    class View(object):
        def login(self):
            return '登陆'
    
        def logout(self):
            return '等处'
    
        def index(self):
            return '首页'
    
    
    def func(environ,start_response):
        start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
        obj = View()
        method_name = environ.get('PATH_INFO').strip('/')
        if not hasattr(obj,method_name):
            return ["".encode("utf-8"),]    
        response = getattr(obj,method_name)()
        return [response.encode("utf-8")  ]
    
    
    server = make_server('127.0.0.1', 8000, func)
    server.serve_forever()
    
#!/usr/bin/env python
# -*- coding:utf-8 -*-
MIDDLEWARE_CLASSES = [
    'utils.session.SessionMiddleware',
    'utils.auth.AuthMiddleware',
    'utils.csrf.CsrfMiddleware',
    'utils.element.ElementMiddleware',
]

from wsgiref.simple_server import make_server

class View(object):
    def login(self):
        return '登陆'

    def logout(self):
        return '等处'

    def index(self):
        return '首页'


def func(environ,start_response):
    start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
    obj = View()
    method_name = environ.get('PATH_INFO').strip('/')
    if not hasattr(obj,method_name):
        return ["".encode("utf-8"),]
    response = getattr(obj,method_name)()
    # 对字符串的前后进行包装
    # msg = "【auth】【session】 %s 【session】 【auth】 " %response

    import importlib
    for path in MIDDLEWARE_CLASSES:
        module_path,cls_name = path.rsplit('.',maxsplit=1) # 'utils.session.SessionMiddleware',
        module = importlib.import_module(module_path) # from utils import session
        cls = getattr(module,cls_name)
        obj = cls()
        response = obj.process(response)


    return [response.encode("utf-8")  ]


server = make_server('127.0.0.1', 8000, func)
server.serve_forever()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值