LocalProxy

先看看這個關於class 下劃線方法的使用。python

例1:web

# -*- 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)

查看輸出:
在這裏插入圖片描述
這裏面都重寫了下劃線方法。flask

而後再看看改進版的。session

例2:svg

test2.py代碼:ui

# -*- 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代碼:spa

# -*- 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裏面的調用也是相似於這種方式。code

相關文章
相關標籤/搜索