先看看这个关于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