日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python学习笔记(二十)初识面向对象

發布時間:2023/12/20 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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学习笔记(二十)初识面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。