先看看這個關於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