LocalProxy

先看看这个关于class 下划线方法的使用。

例1:

# -*- coding: utf-8 -*-
# @Time    : 2019/6/24 下午 9:20
# @Author  : lh
# @Email   : 22@qq.com
# @File    : test.py
# @Software: PyCharm

class Test(object):

    def __str__(self):
        return '__st__ return'

    def __getattr__(self, item):
        return '__getattr__ return '

    def __getitem__(self, item):
        return '__getitem__ return'

    def __add__(self, other):
        return other + 1


obj = Test()
print('这是执行__str__方法:', obj)
print('这是执行__getattr__方法:', obj.xx)
print('这是执行__getitem__方法:', obj['xxx'])
print('这是执行__add__方法:', obj + 2)

查看输出:
在这里插入图片描述
这里面都重写了下划线方法。

然后再看看改进版的。

例2:

test2.py代码:

# -*- coding: utf-8 -*-
# @Time    : 2019/6/24 下午 9:20
# @Author  : lh
# @Email   : 22@qq.com
# @File    : test.py
# @Software: PyCharm

DATA = {
    'request': {
        'methods': 'GET',
        'form': {
            'user': 'Bob',
        },
    },
    'session': {
        'user_info': [{'name': 'Bob', 'age': 18}]
    }
}

class LocalProxy(object):

    def __init__(self, key):
        self.key = key


    def get_dict(self):
        return DATA[self.key]

    def __str__(self):

        return 'str'

    def __getattr__(self, item):
        data_dict = self.get_dict()
        return data_dict[item]

    def __getitem__(self, item):
        data_dict = self.get_dict()
        return data_dict[item]

    def __add__(self, other):
        return other + 1


request = LocalProxy('request')
session = LocalProxy('session')

test3.py代码:

# -*- coding: utf-8 -*-
# @Time    : 2019/6/24 下午 9:36
# @Author  : lh
# @Email   : 22@qq.com
# @File    : test3.py
# @Software: PyCharm

from localproxy.test2 import request, session


print(request.methods)
print(request.form)
print(session.user_info)

我们来看看request.methods request.form session.user_info分别的输出。
在这里插入图片描述
你有没发现这种调用方式跟flask里面的request和session之类这些使用方式简直不要太像了吧。其实flask里面的调用也是类似于这种方式。

posted @ 2019-06-25 09:45  a_py  阅读(310)  评论(0编辑  收藏  举报