python学习笔记(二十)初识面向对象
?
面向?qū)ο蟮木幊痰闹饕枷胧前褬?gòu)成問(wèn)題的各個(gè)事物分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描述一個(gè)事物在解決問(wèn)題的過(guò)程中經(jīng)歷的步驟和行為。對(duì)象作為程序的基本單位,將程序和數(shù)據(jù)封裝其中,以提高程序的重用性,靈活性和可擴(kuò)展性。類是創(chuàng)建對(duì)象的模板,一個(gè)類可以創(chuàng)建多個(gè)對(duì)象。對(duì)象是類的實(shí)例化。
類是抽象的,不占用存儲(chǔ)空間;而對(duì)象具體的,占用存儲(chǔ)空間。
面向?qū)ο笥腥筇匦?#xff1a;封裝,繼承,多態(tài)。
?
面向?qū)ο笞钪匾母拍罹褪穷?#xff08;Class)和實(shí)例(Instance),必須牢記類是抽象的模板,比如Student類,而實(shí)例是根據(jù)類創(chuàng)建出來(lái)的一個(gè)個(gè)具體的“對(duì)象”,每個(gè)對(duì)象都擁有相同的方法,但各自的數(shù)據(jù)可能不同。
類:一個(gè)種類,一個(gè)模型。比如:汽車模型、月餅?zāi)P?/span>
對(duì)象:指具體的東西,模型造出來(lái)的東西叫做對(duì)象。
實(shí)例:實(shí)例和對(duì)象是一樣的。
實(shí)例化:實(shí)例化就是造東西的這個(gè)過(guò)程。就是指造汽車或造月餅這個(gè)過(guò)程。
屬性:就是變量
方法:就是類里面的函數(shù)
以Person類為例,在Python中,定義類是通過(guò)class關(guān)鍵字:
class Person: #經(jīng)典類pass class Person2(object): #新式類pass #類名首字母都大寫(xiě) #在python3里面經(jīng)典類和新式類沒(méi)有任何區(qū)別class后面緊接著是類名,即Person,類名通常是大寫(xiě)開(kāi)頭的單詞,緊接著是(object),表示該類是從哪個(gè)類繼承下來(lái)的,繼承的概念我們后面再講,通常,如果沒(méi)有合適的繼承類,就使用object類,這是所有類最終都會(huì)繼承的類。
定義好了Person類,那么就可以根據(jù)Person類造出person實(shí)例
class Person: #經(jīng)典類def __init__(self,name):#構(gòu)造函數(shù)self.name = nameself.nose = 2 #鼻子 #類中定義的變量叫屬性self.face = 2 #臉self.head = 10 #腦子self.wing = 4#翅膀print('開(kāi)始造人。。。')def driver(self): #類里面定義變量一定要叫self,不然會(huì)報(bào)錯(cuò)print('老司機(jī),開(kāi)車非常穩(wěn)')self.eat() #調(diào)用類里面的函數(shù)def fly(self):print('%s 在飛。。'%self.name)#獲取類里面的變量def eat(self):print('%s 吃火鍋,吃小龍蝦,喝啤酒'%self.name)#類在用到時(shí)候,首先必須實(shí)例化 zlj = Person('小喵喵') #實(shí)例化,類名加上括號(hào)就是實(shí)例化 zlj.eat() zlj.fly() print(zlj.wing) print(zlj.nose)現(xiàn)在我們來(lái)做一個(gè)練習(xí),根據(jù)某公司的簽名規(guī)則編寫(xiě)簽名代碼,首先我們定義函數(shù)來(lái)實(shí)現(xiàn)
簽名規(guī)則如下:
A、輸入數(shù)據(jù): 1、請(qǐng)求數(shù)據(jù): 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、計(jì)算規(guī)則: 1、將商家編碼(vendorId)1697進(jìn)行兩次MD5加密得到一個(gè)字符串 Astr:09B764965CE4E92BED8BD3140E22D5CF 2、將請(qǐng)求數(shù)據(jù) 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 進(jìn)行urlDecode處理(編碼格式為utf-8)得到一個(gè)字符串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 拼接得到一個(gè)待加密的字符串 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字符串進(jìn)行加密得到最終的簽名: 6F811B63B11D92BA4A359E6DC98EEE31分析思路:
1.獲取到請(qǐng)求數(shù)據(jù)
2.提取到商家編碼
3.將商家編碼進(jìn)行2次MD5加密,得到astr
4.再將請(qǐng)求數(shù)據(jù)進(jìn)行一次urldecode,得到urlstr
5.拼接astr+url_str,然后再進(jìn)行一次MD5加密
插入一個(gè)小知識(shí)點(diǎn),url編碼和url解碼
from urllib import parse url='http://www.baidu.com?query=python基礎(chǔ)教程 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解碼
簽名規(guī)則使用函數(shù)實(shí)現(xiàn),代碼如下:
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轉(zhuǎn)換成字典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) #調(diào)用獲取veriodid函數(shù)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))通過(guò)類來(lái)實(shí)現(xiàn)簽名規(guī)則,代碼如下:
class Sign(object):def __init__(self,req_data):self.req_data = req_data #這寫(xiě)了self的話,在其他的函數(shù)里面也可以用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__':
#判斷這個(gè)python是在別的地方導(dǎo)入的,還是直接運(yùn)行的這個(gè)python文件
#這句話一般是做調(diào)試的時(shí)候用的。如果是直接運(yùn)行這個(gè)python文件的時(shí)候,這句話一點(diǎn)用都沒(méi)有
轉(zhuǎn)載于:https://www.cnblogs.com/mululu/p/9068047.html
總結(jié)
以上是生活随笔為你收集整理的python学习笔记(二十)初识面向对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 非线性系统线性化过程
- 下一篇: cfe刷机教程 斐讯k3_2019斐讯K