python代码优化_python 代码优化,反射。

本人今天学到一个知识点,作为一个给菜鸟的科普,老鸟们不要见笑。

#coding=utf-8

import requests

import json

class op_request(object):

def __init__(self, request, request_body):

self.request_url = request["host"] + request["url"]

self.method = request["method"]

self.protocol = request["protocol"]

self.headers = request["headers"]

self.request_body = request_body

def send_request(self):

if self.method == "post" and self.protocol == "http":

re_dict = self.http_request_post()

return re_dict

def http_request_post(self):

url = self.request_url

request_body = self.request_body

headers = self.headers

session = requests.session()

session.headers.update(headers)

response = session.post(url, request_body)

data = json.loads(response.content)

re_dict ={}

re_dict["data"] = data

re_dict["status_code"] = response.status_code

return re_dict

这个是一个封装了request操作的模块。当初始化好op_request这个类以后,我们去执行send_request拿到一个返回值。

一开始我在这里做了一个判断,当请求方法是post,请求协议是http的时候,那么执行http_request_post这个函数 (基于http的post请求。)

那么以后要增加模块的时候,很简单的就会写成。

if self.method == "post" and self.protocol == "https":

re_dict = self.https_request_post()

然后在下面写一个def https_request_post(self)的方法。

如果有10种请求方法,我就会很呆萌的写10个if。

其实关于反射这个概念,我1个月以前就听说过,一直没有静下心来看,在写代码的时候虽然知道可以用反射做,不过为了快点交货,就先用这套代码应付下。

现在有时间了,就仔细看了下反射。发现,好东西很多,学不完的。

根据我自己的理解反射机制就是把你的函数名当做你的函数来调用。

#coding=utf-8

import requests

import json

class op_request(object):

def __init__(self, request, request_body):

self.request_url = request["host"] + request["url"]

self.method = request["method"]

self.protocol = request["protocol"]

self.headers = request["headers"]

self.request_body = request_body

def send_request(self):

func_name = self.protocol + "_" + self.method

try:

func = getattr(op_request, func_name)

re_dict = func(self)

except Exception,e:

print " no func_name"

return re_dict

def http_post(self):

url = self.request_url

request_body = self.request_body

headers = self.headers

session = requests.session()

session.headers.update(headers)

response = session.post(url, request_body)

data = json.loads(response.content)

re_dict ={}

re_dict["data"] = data

re_dict["status_code"] = response.status_code

return re_dict

还是关注send_request()

这里我把初始化类的时候拿到协议和方法进行了一次拼接:func_name = self.protocol + "_" + self.method

然后用我拼接出来的函数名去定义一个方法,func = getattr(op_request, func_name)

然后执行这个方法:re_dict = func(self)

仔细的分解

self.protocol = http

self.method = post

那么func_name 就是 http_post

然后让程序去找http_post这个方法,如果存在就调用它。

本来要写不知道多少个的if判断,现在只要用这几行代码就搞定了了。

马上让代码有点高大上的感觉有没有。

难怪很多地方都需要开发转测试,这种对他们来说可能就是基本功。

关于getattr的用法我现在就想到这个,和他一起的还有hasattr,delattr,setattr。有新区的同学可以自己去用一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值