面向對象編程(1) 概念及面向對象及面向過程的區別實例


1.面向過程和面向對象的區別

例子:

 面向對象編程  class

    面向過程編程      執行者

        1、4S店 掏錢買車

        2、保險公司 上保險

        3、稅務局 交購置稅

        4、交管局 驗車、選號、交錢、取牌、上牌

    面向對象       指揮者

        買車辦事處   #直接合為一個整體

            1、4S店 掏錢買車

            2、保險公司 上保險

            3、稅務局 交購置稅

            4、交管局 驗車、選號、交錢、取牌、上牌

2.面向對象的一些相關概念

        一個種類,一個模型。比如汽車模型

對象

        指具體的東西,模型造出來的東西叫做對象。

實例

        實例和對象是一樣的。

實例化

        實例化就是造東西的這個過程

屬性

        就是類里面變量

方法

        就是類里面的函數

    繼承

    封裝

    多態

    。。。。。

self代表的是本類對象。

    因為函數里面的變量都是局部變量,出了函數就不能用了。

    用self給對象綁定了之后,就可以self.xx隨便用了

 

    構造函數

        def __init__():

            pass

     構造函數就是類在實例化的時候執行的函數。

     類在實例化的時候,會自動執行它

 

    析構函數

        def __del__():

            pass

      實例被銷毀的時候執行的。

 

    屬性方法

        看起來像屬性的一個方法。

    類變量

        類變量,公共的變量,每個實例都可以用

    實例變量(成員變量)

    實例方法

        實例化之后才可以用的。

    類方法

        1、不用實例化就可以直接調用。

        2、它可以通過cls使用類變量

        3、它不能調用這個類里面的其他實例方法和實例變量

    靜態方法

        #你不想實例化的時候,就可以定義成類方法

        #靜態方法就是一個普通函數,只不過是寫在類里面而已,它用不了類變量、類方法、實例變量、實例方法

    私有

        私有方法

        私有變量

            出了類之后,就不能用了。

 

    if  __name__ == '__main__':

        判斷這個python是在別的地方導入的,還是直接運行的這個python文件

        這句話一般是做調試的時候用的。

        1、如果是直接運行這個python文件的時候,這句話一點用都沒有

        2、作為模塊,被別的文件導入時,該語句后面就會不執行。

 

 

3.類

例子

class Person:  #經典類,類名首字母都大寫
#class Person2(object):#新式類  在python3里面經典類和新式類沒有任何區別
    def __init__(self,name):#構造函數(不是必須的)  構造函數就是實例化的時候執行的函數 類在實例化的時候,會自動執行它(比如連接mysql就可以使用,不必多次連接)
self.name = name #self后就可以在類中直接用 就可以調用屬性或方法
self.nose = 2 #鼻子(屬性)
self.face = 2 #臉
self.head = 10 #腦子
self.wing = 4#翅膀
print('開始造人。。。')
def driver(self):
print('老司機,開車非常穩')
self.eat() #調用類里面的函數
def fly(self):
print('%s 在飛。。'%self.name)
#獲取類里面的變量
def eat(self):
print('%s 吃火鍋,吃小龍蝦,喝啤酒'%self.name)

#類在用到時候,首先必須實例化(類相當於模型不能用,必須實例化)
zll = Person(name='張流量')#造人並賦予名字
zll.driver() #
zlj = Person() #實例化,類名加上括號就是實例化,實例化后保存到zlj
# zlj.eat()
# zlj.fly()
# zlj.fly()
# zlj.eat()
# 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:商家編碼:
1697
B、計算規則:
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


python基礎教程 %DFSDF url編碼
%DFSDF 學習 url解碼
需求分析:
1、請求數據獲取到
2、提取到商家編碼
3、將商家編碼進程2次md5 得到astr
4、再將請求數據進行一次urldecode,urlstr #urldecode 在訪問頁面會把漢字及特殊字符會變為url編碼發送請求 所以需要url編碼和解碼
如python基礎教程 %DFSDF url編碼 %DFSDF 學習 url解碼

5、astr+url_str MD5

加密規則

from urllib import parse    #用到的模塊

 

url='http://www.baidu.com?query=python基礎教程 sdfsdf &^ '

 

url_str = parse.quote_plus(url)  #url編碼(quote和quote_plus  一樣但后者更好) parse.quote_plus

 

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('&')  #對於獲取的信息先通過&進行分割成list

    #【vendorId=1697,poscode=xxx】

    for i in sub_list:     #  將list轉化為kv的字典

        # verid=1697

        k,v = i.split('=')    #直接將k,v這兩值存放。

        #[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):   ####  該函數應該放到前面  否則sign調用事出錯,有順序先后的問題,面向對象則沒有先后的限制

    md = hashlib.md5()  #實例化

    md.update(s.encode())#  加密時必須轉為bytes類型

    return md.hexdigest()  #返回加密后結果

 

# print(sign(s))

 

 

 面向對象方式

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('&')  #在類傳過來已將實例化過了 所以直接self直接調用就可以了

        for i in sub_list:

            k, v = i.split('=')

            data_dict[k] = v

        self.verid = data_dict.get('vendorId')  #相當於直接加了變量  可以省去使用return返回結果

    def get_sign(self):

      #self.get_sign()  需要先調用執行一下  或初始化調用

        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

 

print('__nam__',__name__)   #__main__

 

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) #實例化 class才生效

    print(abc.sign)  #應為sign被定義屬性所以可以直接打印出結果

    print('我是sign.....')




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM