资讯专栏INFORMATION COLUMN

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

dance / 2445人阅读

摘要:今天我们来说一个非常实用的例子,小菜接到组长老王的一个任务,安排一个新的活,这个活是这样的老王小菜啊,你帮我写一个登入脚本,跑十几条命令到服务器上,然后存一下日志。这个时候,小菜偷偷的瞄了一眼组长老王,常舒一口气,总于写完了。

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全套资料!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121548.html

相关文章

  • Python语言中计数方法的演变

    摘要:译文链接编程派有时候,利用语言简洁优雅地解决问题的方法,会随着时间变化。随着不断进化,统计列表元素数量的方法也在改变。最后将字典中相应键的值设置为新的计数。我们发现这种方法比之前的代码更加简洁优雅,所以提交了此次修改。 showImg(https://segmentfault.com/img/remote/1460000010723715); 文中如对专业术语的翻译有误,请Pytho...

    sunsmell 评论0 收藏0
  • Python: 陌生的 metaclass

    摘要:但一般情况下,我们使用类作为元类。那么,元类到底有什么用呢要你何用元类的主要目的是为了控制类的创建行为。当然,有很多种做法,这里展示用元类的做法。当你创建类时,解释器会调用元类来生成它,定义一个继承自的普通类意味着调用来创建它。 元类 Python 中的元类(metaclass)是一个深度魔法,平时我们可能比较少接触到元类,本文将通过一些简单的例子来理解这个魔法。 类也是对象 在 Py...

    miya 评论0 收藏0
  • Python有什么好学的》之修饰器

    摘要:然后煎鱼加了一个后再调用函数,得到的输出结果和加修饰器的一样,换言之等效于因此,我们对于,可以理解是,它通过闭包的方式把新函数的引用赋值给了原来函数的引用。 Python有什么好学的这句话可不是反问句,而是问句哦。 主要是煎鱼觉得太多的人觉得Python的语法较为简单,写出来的代码只要符合逻辑,不需要太多的学习即可,即可从一门其他语言跳来用Python写(当然这样是好事,谁都希望入门简...

    lewinlee 评论0 收藏0
  • Vim 的哲学(一)

    摘要:之所以能卓尔不群靠地就是一种自成一派且精悍有效的编辑器哲学当然也是,就好像网游千千万却唯有一览众山小,那靠地不是技巧与外在,而是与众不同的世界观。征服其实是一种领悟,我融入了的哲学而已。这也是好东西,它比上一个更贴近的哲学。 就在几个小时以前,我回答了一个关于推荐开发工具的问题,很多朋友表示喜欢和鼓励,非常感谢!我也很想多写一些细节,于是便起意开一个系列来聊聊我多次提到的 Vim。 ...

    honhon 评论0 收藏0
  • Python学习之路31-继承的利弊

    摘要:使用抽象基类显示表示接口如果类的作用是定义接口,应该将其明确定义为抽象基类。此外,抽象基类可以作为其他类的唯一基类,混入类则决不能作为唯一的基类,除非这个混入类继承了另一个更具体的混入这种做法非常少见。 《流畅的Python》笔记本篇是面向对象惯用方法的第五篇,我们将继续讨论继承,重点说明两个方面:继承内置类型时的问题以及多重继承。概念比较多,较为枯燥。 1. 继承内置类型 内置类型...

    tinylcy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<