面向对象 vs 面向过程

面向过程编程 (执行者)
  1、4S店 掏钱买车
  2、保险公司 上保险
  3、税务局 交购置税
  4、交管局 验车、选号、交钱、取牌、上牌

面向对象 (指挥者)
  买车办事处
    1、4S店 掏钱买车
    2、保险公司 上保险
    3、税务局 交购置税
    4、交管局 验车、选号、交钱、取牌、上牌

举例:加密规则

方法一、面向过程

from urllib import parse

import hashlib

def get_vendorid(req_data):
  data_dict = {}
  sub_list = req_data.split('&')
  #【vendorId=1697,poscode=xxx】
  for i in sub_list:
    # verid=1697
    k,v = i.split('=')
    #[verid,1697]
    # data_dict.setdefault(k,v)
    data_dict[k]=v
  return data_dict.get('vendorId')

def sign(req_data):
  verid = get_vendorid(req_data)    #调用获取veriodid函数
  first = my_md5(verid)
  astr = my_md5(first)  #两次md5
  url_str = parse.quote_plus(req_data) #url编码
  res = my_md5(astr+url_str)
  return res

def my_md5(s):
  md = hashlib.md5()
  md.update(s.encode())
  return md.hexdigest()

s = 'vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0'
# print(sign(s))


***********************************************************************************

方法二、面向对象

from urllib import parse
import hashlib

class Sign(object):
  def __init__(self,req_data):
    self.req_data = req_data #这写了self的话,在其他的函数里面也可以用self.xx
    self.get_verid()
    self.get_sign()
    def md5(self,s):
    md = hashlib.md5()
    md.update(s.encode())
    return md.hexdigest()

  def get_verid(self):
    data_dict = {}
    sub_list = self.req_data.split('&')
    for i in sub_list:
      k, v = i.split('=')
      data_dict[k] = v
    self.verid = data_dict.get('vendorId')
  def get_sign(self):
    frist = self.md5(self.verid)
    astr = self.md5(frist)
    url_str = parse.quote_plus(self.req_data)
    self.sign = self.md5(astr+url_str)
    return self.sign

s = 'vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0'

sign = Sign(s)

print(sign.sign)

猜你喜欢

转载自www.cnblogs.com/lynn-chen/p/9088419.html