天天看點

Python實戰項目:Python面向對象的微信應用開發Python面向對象的微信應用開發

Python面向對象的微信應用開發

一、案例背景

微信,是我們每個人身邊交往和聯系的工具。幾乎每個人都在用着微信, 那我不免要問一下使用微信的朋友,你覺得你的微信裡有多少個男性朋友,又有多少個女性朋友呢?你有男性朋友多了,是不是證明你這個人比較愛認識鐵哥們。你有女朋友多了,是不是證明你這個人比較愛認姐們呢?不過,提醒各位,交友須謹慎喲。不過,今天的話題是找到你的微信裡有多少個男性的朋友,有多少個女性的朋友,你猜猜,會不會有不男不女的朋友呢?

Python實戰項目:Python面向對象的微信應用開發Python面向對象的微信應用開發

二、案例結果

Python實戰項目:Python面向對象的微信應用開發Python面向對象的微信應用開發

三、先面向過程進行分析

Python實戰項目:Python面向對象的微信應用開發Python面向對象的微信應用開發

根據圖示思路進行代碼的編寫,代碼中需要安裝子產品wxpy。

'''
初始化機器人
'''
bot = Bot()
'''
擷取微信機器人清單
'''
myFriends = bot.friends()
'''
定義字典,存儲在sex_dict中,記錄男女總數
'''
sex_dict = {'male':0,'female':0}
'''
周遊myFriends清單中每一個朋友圈朋友成員。
'''
for friend in myFriends:
'''
如果是男的,記錄男的總和加1,女的,記錄女的總和加1
'''
    if friend.sex == 1:
        sex_dict['male'] +=1
    elif friend.sex ==2:
        sex_dict['female'] +=1
print(sex_dict)
           

四、用面向對象的方法改寫: 把上面程式改成面向對象的小案例,就可以把語句放到類的方法裡,然後執 行類的方法就行了,因為這段代碼合在一起完成一個功能,我們可以把他們封裝在一起,供我們使用一個方法直接調用即可。

class Friend:
    def getFriend(self): 
        bot = Bot()
        myFriends = bot.friends()
        sex_dict = {'male':0,'female':0}
        for friend in myFriends:
            if friend.sex == 1:
                sex_dict['male'] +=1
            elif friend.sex ==2:
                sex_dict['female'] +=1
        print(sex_dict)
if __name__==”__main”:
    '''
        執行個體化Friend類
    '''
    friend=Friend()
    '''
        執行Friend裡面的getFriend方法
    '''
    friend.getFriend()
           

五、可以把getFriend()封裝成私有方法,然後在裡面提供一個公共的接口方法,外部再調用。私有方法的實作代碼如下。

class Friend:
    '''
        定義私有方法
    '''
    def __myfriend(self):
        bot = Bot()
        myFriends = bot.friends()
        sex_dict = {'male':0,'female':0}
        for friend in myFriends:
            if friend.sex == 1:
                sex_dict['male'] +=1
            elif friend.sex ==2:
                sex_dict['female'] +=1
        print(sex_dict)
    def getFriend(self): 
        __myfriend()
if __name__==”__main”:
    '''
        執行個體化Friend類
    '''
    friend=Friend()
    '''
        執行Friend裡面的getFriend方法
    '''
    friend.getFriend()
           

六、現在把getFriend()加上@classmethod裝飾器,再去看程式的具體調用方法。

class Friend:
    '''
        定義私有方法
    '''
    def __myfriend(self):
        bot = Bot()
        myFriends = bot.friends()
        sex_dict = {'male':0,'female':0}
        for friend in myFriends:
            if friend.sex == 1:
                sex_dict['male'] +=1
            elif friend.sex ==2:
                sex_dict['female'] +=1
        print(sex_dict)
    '''
        加classmethod裝飾器,參數一般使用類參數
    '''
    @classmethod
    def getFriend(cls): 
        __myfriend()
if __name__==”__main”:
    '''
        調用@classmethod修飾的方法,可以不用執行個體化
    '''
    Friend.getFriend()
           

六、現在繼續把getFriend()加上@staticmethod裝飾器,再去看程式的具體調用方法。

class Friend:
    '''
        定義私有方法
    '''
    def __myfriend(self):
        bot = Bot()
        myFriends = bot.friends()
        sex_dict = {'male':0,'female':0}
        for friend in myFriends:
            if friend.sex == 1:
                sex_dict['male'] +=1
            elif friend.sex ==2:
                sex_dict['female'] +=1
        print(sex_dict)
    '''
        加staticmethod裝飾器,根據函數的需要再使用參數
    '''
    @staticmethod
    def getFriend(cls): 
        __myfriend()
if __name__==”__main”:
    '''
        調用@staticmethod修飾的方法,可以不用執行個體化
    '''
    Friend.getFriend()
           

七、分析微信好友技術的提升。

用面向對象的方法分析微信好友是對面向對象程式設計的總結與歸納,同時微信中的一些分析也是面試項目比較新穎的類型,後期學習深入可以根據微信的分析去推送朋友資訊或者是一些快訊、新聞等資訊,也可以提供當地的導航服務等。你可以輸出微信好友的對象結構,根據不同的屬性去開發不同的應用。

from wxpy import Bot
'''
    初始化機器人
'''
bot = Bot()
'''
    擷取微信機器人清單
'''
myFriends = bot.friends()
'''
    列印微信好友中 某一個人的對象結構.
'''
print(dir(myFriends[0]))
           

上述代碼的運作結果如圖所示。

Python實戰項目:Python面向對象的微信應用開發Python面向對象的微信應用開發

八、微信結合pyecharts畫微信好友分布圖。

下面結合pyecharts子產品去畫一下微信好友的全國分布圖,pyecharts最好的特性在于可以畫中國地圖,根據微信好友的province省份屬性可以去畫一下微信好友全國分布圖。

注意,pyechars畫地圖的方法是固定的,但是千萬要保證你的微信好友沒有外國的,或者沒有空值,否則中國地圖上找不到地點,程式就會報錯,在程式中使用if '\u4e00' <= key < '\u9fff'語句來實作隻接收中文資訊,這裡預設中文資訊都是中國的省份。代碼如下。代碼中需要安裝子產品wxpy和pyecharts。

from wxpy import Bot
from pyecharts.charts import Geo
'''
    初始化機器人
'''
bot = Bot()
'''
    擷取微信機器人清單
'''
myFriends = bot.friends()
'''
    定義空字典,存儲在微信中位址的鍵和值
'''
address_dict = {}
'''
    周遊myFriends清單中每一個朋友圈朋友成員。
'''
for friend in myFriends:
'''
    如果是字典中沒有,字典中建立相應的鍵,并将鍵值記錄為0,
    然後在有鍵值的基礎加1,如果有就在原來基礎上加1
'''
    if friend.province not in address_dict.keys():
        address_dict[friend.province]=0
    address_dict[friend.province] +=1
'''
    定義兩個空清單,接收有效的地名和朋友數量
'''
xx=[]
yy=[]
for keys,value in address_dict.items():
    '''
        判斷鍵值不能為空
    '''
    if keys!='':
        '''
            對鍵值中每個漢字或字母進行周遊
        '''
        for key in keys:
            '''
                單獨判斷鍵值中字母或數字是否是漢字
            '''
            if '\u4e00' <= key <= '\u9fff':
                xx.append(keys)
                yy.append(value)
'''
    将位址和朋友數量用zip進行對應
'''
aa=[list(z) for z in zip(xx,yy)]
geo=(
        Geo()
        .add_schema(maptype="china")
        .add("微信好友全國分布圖",aa)
    )
'''
     将畫出的地圖資料結果渲染到網頁上
'''
geo.render("微信好友全國分布圖.html")
           

上述代碼的運作結果如圖所示。

Python實戰項目:Python面向對象的微信應用開發Python面向對象的微信應用開發