先看看这个关于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里面的调用也是类似于这种方式。