假装Python高手,把类这样改,真刺激!

菜鸟学Python

共 2859字,需浏览 6分钟

 ·

2021-09-29 09:17




Python学了好几年,发现功力还是那样,很多同学经常这样抱怨!都说Python入门容易,精通难,确实是这样的,每当我们打开一些牛逼的源码框架,进去看窥探大牛的源码,比如Python里面非常著名的Django和Flask里面的源码,发现跟天书一样


今天我们来说一个非常实用的例子,小菜接到组长老王的一个任务,安排一个新的活,这个活是这样的:


老王:小菜啊,你帮我写一个ssh登入脚本,跑十几条命令到服务器上,然后存一下日志。


小王:哇,这活简单啊,so easy 分分钟搞定啊!这不就是一个登入服务器的命令吗~~


小王思考了0.08秒,写下来猥代码:


1.开始撸代码
这个活很简单,于是非常简单的想到了用Python里面的paramiko模块,直接分分钟搞定。

小菜分分钟就写完了代码,豁然觉得有点不对,这样交差是不是有点过分,怎么说自己也学了2年Python ,这代码完全没有封装啊。不行不行,有点太'菜'了,不行,我要装高手一点,于是赶紧写了第二版。


2.封装成类

上面的代码太简单的了,简直就是原型机器,于是小菜用类去封装了一下,改进了一下。

设计了一个SSHClinet类,把一些用户名/密码/主机地址/端口都封装到类的属性里面,然后设计了connect函数去进行连接,如果出现异常就进行处理。然后所有的日志记录都存到双向队列history里面。


然后我们跑到服务器上执行命令,并把处理的结果stdout结果进行简单的处理,存储到history里面。当然把读取histroy和关闭链接close()也做了封装。


这个时候,小菜偷偷的瞄了一眼组长老王,常舒一口气,总于写完了。然后跑一下看看吧。

>

Dump the command history...

{'pwd': '/root'}

{'date': 'Mon Sep 20 16:09:19 CST 2021'}

Close ssh connection!


跑的没有问题啊,代码也很clean啊,异常都考虑了啊,打完收工!


3.啥事带上下文管理器的类


老王过来检查小菜干的活,大概看了1分钟,一脸严肃的说:


小菜啊,你知道with的用法吧,为啥家我们在读写文件的时候,都喜欢用with语句,因为方便啊。我们读写文件用with,然后关闭啥的我们都不用关,有with自动帮我处理。比如下面的情况:

with open('菜鸟学Python.txt','w' ,encoding='utf-8') as wf:    wf.write('我要好好学Python')


那么我们上面写的SSHClinet类是否也能像with一样灵活方便的,你好好想想吧。


这其实就是带上下文管理器的类,如果构建呢?其实很简单:

我们只需要再类里面增加2个魔法函数,一个是__enter__,一个是__exit__即可,就可以迅速把普通的类山鸡变凤凰。注意enter里面一定要返回类的对象self,否则无法调用run方法。


运行一下看看:


是不是非常干净,清爽,我们把主要的逻辑封装到run里面,然后ssh连接服务器和关闭服务器都封到enter和exit里面即可。这样代码也更pythonic。


4.进阶高手

经过上面的讲解,相信大家都明白了,于是小菜若有所思的开始动手修改了原来的代码。把普通的类变成了带上下文管理器的类。

整个的代码80%都跟原来的类似,我们只是增加了__enter和__exit__,其实就是原来的 connect和close 逻辑部分,但是这样一修改,外边在使用我们这个库的时候就会很简单。


>

Dump the command history...

{'pwd': '/root'}

{'date': 'Mon Sep 20 16:42:00 CST 2021'}

Close ssh connection!


是不是爽多了,高手和菜鸟的区别,在于写完代码之后会思考代码如果优化,如果提高它的扩展性,如果提高它的稳定性,如果这个代码复用,如果这个代码有更多人调用,我应该如何让他使用更简单

如果你经常写代码的时候问这么多如果,相信总有一天你的coding 功力会大增。欢迎大家在留言区指导工作,记得给个三连哈!





推荐阅读:

入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径


量化定投基金到底能赚多少钱?  | 我用Python对去年800只基金的数据分析  


干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影


趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!


AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影


小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!


年度爆款文案


点阅读原文,领AI全套资料!

浏览 24
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报