python学习笔记(二十)初识面向对象
面向对象的编程的主要思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为。对象作为程序的基本单位,将程序和数据封装其中,以提高程序的重用性,灵活性和可扩展性。类是创建对象的模板,一个类可以创建多个对象。对象是类的实例化。
类是抽象的,不占用存储空间;而对象具体的,占用存储空间。
面向对象有三大特性:封装,继承,多态。
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
类:一个种类,一个模型。比如:汽车模型、月饼模型
对象:指具体的东西,模型造出来的东西叫做对象。
实例:实例和对象是一样的。
实例化:实例化就是造东西的这个过程。就是指造汽车或造月饼这个过程。
属性:就是变量
方法:就是类里面的函数
以Person类为例,在Python中,定义类是通过class关键字:
class Person: #经典类pass class Person2(object): #新式类pass #类名首字母都大写 #在python3里面经典类和新式类没有任何区别
class后面紧接着是类名,即Person
,类名通常是大写开头的单词,紧接着是(object)
,表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用object
类,这是所有类最终都会继承的类。
定义好了Person类,那么就可以根据Person类造出person实例
class Person: #经典类def __init__(self,name):#构造函数self.name = nameself.nose = 2 #鼻子 #类中定义的变量叫属性self.face = 2 #脸self.head = 10 #脑子self.wing = 4#翅膀print('开始造人。。。')def driver(self): #类里面定义变量一定要叫self,不然会报错print('老司机,开车非常稳')self.eat() #调用类里面的函数def fly(self):print('%s 在飞。。'%self.name)#获取类里面的变量def eat(self):print('%s 吃火锅,吃小龙虾,喝啤酒'%self.name)#类在用到时候,首先必须实例化 zlj = Person('小喵喵') #实例化,类名加上括号就是实例化 zlj.eat() zlj.fly() print(zlj.wing) print(zlj.nose)
现在我们来做一个练习,根据某公司的签名规则编写签名代码,首先我们定义函数来实现
签名规则如下:
A、输入数据: 1、请求数据: 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 2:商家编码: 1697B、计算规则: 1、将商家编码(vendorId)1697进行两次MD5加密得到一个字符串 Astr:09B764965CE4E92BED8BD3140E22D5CF 2、将请求数据 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 进行urlDecode处理(编码格式为utf-8)得到一个字符串urlDecodeStr: 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 3、urlDecodeStr + Astr 拼接得到一个待加密的字符串 beforeMD5 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-0000E009B764965CE4E92BED8BD3140E22D5CF 然后将 beforeMD5字符串进行加密得到最终的签名: 6F811B63B11D92BA4A359E6DC98EEE31
分析思路:
1.获取到请求数据
2.提取到商家编码
3.将商家编码进行2次MD5加密,得到astr
4.再将请求数据进行一次urldecode,得到urlstr
5.拼接astr+url_str,然后再进行一次MD5加密
插入一个小知识点,url编码和url解码
from urllib import parse url='http://www.baidu.com?query=python基础教程 sdfsdf &^ ' url_str = parse.quote_plus(url) #url编码 print(parse.quote_plus(baidu_url))baidu_url = 'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=python%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B&oq=python&rsv_pq=b6c92ffc00023232&rsv_t=be4d%2FdgIVLHbmdj5jU9bfpJTXGIAcO4y2u%2BfKsxWWJW2wIKbEuXL6tNXiug&rqlang=cn&rsv_enter=1&inputT=878&rsv_sug3=9&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&prefixsug=python&rsp=1&rsv_sug4=2134&rsv_sug=1' print(parse.unquote_plus(baidu_url)) #url解码
签名规则使用函数实现,代码如下:
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,将list转换成字典k,v = i.split('=') #[verid,1697]data_dict[k]=v # data_dict.setdefault(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) #两次md5url_str = parse.quote_plus(req_data) #url编码res = my_md5(astr+url_str)return resdef my_md5(s):md = hashlib.md5()md.update(s.encode())return md.hexdigest()print(sign(s))
通过类来实现签名规则,代码如下:
class Sign(object):def __init__(self,req_data):self.req_data = req_data #这写了self的话,在其他的函数里面也可以用self.xxself.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] = vself.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
if __name__ == '__main__': 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' abc = Sign(s) print(abc.sign) print('我是sign.....')
#if __name__ == '__main__':#判断这个python是在别的地方导入的,还是直接运行的这个python文件#这句话一般是做调试的时候用的。如果是直接运行这个python文件的时候,这句话一点用都没有
转载于:https://www.cnblogs.com/mululu/p/9068047.html
python学习笔记(二十)初识面向对象相关推荐
- Python学习笔记(十九)面向对象 - 继承
Python学习笔记(十九)面向对象 - 继承 一.继承的概念 # 继承:子类继承父类的所有方法和属性# 1. 子类 class A(object):def __init__(self):self.n ...
- Python学习笔记第二十九天(N维数组(ndarray))
Python学习笔记第二十九天 N维数组(ndarray) 构建阵列 索引阵列 ndarray的内部内存布局 阵列属性 内存布局 数据类型 其他属性 阵列接口 ctypes外部功能接口 Array方法 ...
- Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)
Table of Contents appendTo appendTo(source, target) 源代码 append prependTo prependTo源码 prepend ...
- 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言
嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...
- uniapp 学习笔记二十二 购物车页面结构搭建
uniapp 学习笔记二十二 购物车页面结构搭建 cart.vue <template><view><view class="flex padding" ...
- Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用
Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...
- python学习笔记(二) 基本运算
python学习笔记(二) 基本运算 1. 条件运算 基本语法 if condition1: do somethings1elif condition2: do somethings2else: do ...
- python面向对象编程72讲_2020-07-22 Python学习笔记27类和面向对象编程
一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习. 声明:本人学习是在扇贝编程通过网络学习的,相关的知识.案例来源于扇贝编程.如果使用请说明来源. 第27关 类与面向对 ...
- Python学习笔记(十五):类基础
以Mark Lutz著的<Python学习手册>为教程,每天花1个小时左右时间学习,争取两周完成. --- 写在前面的话 2013-7-24 23:59 学习笔记 1,Python中的大多 ...
- Python学习笔记(十九)——Matplotlib入门
目录 Matplotlib简介 导入matplotlib模块 图的参数说明 matplotlib图像组成部分介绍 matplotlib绘图步骤分析 matplotlib实现简单图像 matplotli ...
最新文章
- 汇总|医学图像数据集
- 通过公网ip或域名下载自己的文件的一些思路
- 手机访问PC网站自动跳转到手机网站代码
- php foreach 修改数组,php如何使用foreach修改数组
- SaaS产品设计,从0到1案例实操
- 可控硅失效现象_可控硅坏的原因有哪些
- 视频数据:骨骼数据采集(Skeleton Data)
- java 调试js_Java与JS代码调试技巧
- 清除或重新创建Ruby on Rails数据库
- Solr中的数据导入
- linux第五单元作业,第五单元《微型计算机系统》教案
- 有哪些 pmp 资料分享?
- 学习金字塔 理论的一个应用
- 数理逻辑 | 自然演绎规则整理
- 持续发力Web技术 英特尔驱动万物智能互联
- Android 动画系列之 -- 补间动画
- Air780E小程序远程开关-LuatOS版本
- 苹果手机html吊起拍照,用苹果手机拍照,打开这2个“万能模式”,轻松拍出好照片...
- 大数据企业面试真题汇总二
- Ubantu20.04使用gcc9.3.0安装Nvidia显卡驱动遇到的问题
热门文章
- 转:Jmeter 用户思考时间(User think time),定时器,和代理服务器(proxy server)...
- Android有道词典查询功能
- Android去掉listView,gridView等系统自带阴影
- 迭代之嵌套的for循环
- Linux shell 之 提取文件名和目录名的一些方法
- Android性能优化-App后台优化
- Node.js~在linux上的部署
- iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理
- Windows PowerShell:(2)基本操作
- 获取泛型T的ClassT clazz