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]))

上述代码的运行结果如图所示。

八、微信结合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")

上述代码的运行结果如图所示。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值