博文

目前显示的是标签为“Python”的博文

你绝对没想到的 python 小技巧:定义一个类但出现三个类

 前言 跟同事聊天时同事有的一个很怪的需求:衍生类,也就是说定义一个类,但希望还能同时出现两个与它强相关的衍生类。不多说了,看代码吧: def test(cls): class A(cls): @staticmethod def test(): print('A', cls.__name__) class B(cls): @staticmethod def test(): print('B', cls.__name__) globals()[cls.__name__ + 'A'] = A globals()[cls.__name__ + 'B'] = B return cls @test class T(object): ... TA.test() TB.test() 原理很简单,装饰器test输入一个类,同时基于该类在全局注册两个类,然后返回原类,实际使用时就会发现我们定义了一个类却一下子得到了三个类。用这种方法可以做很坏的事情: 比方说我们在全局注册类的时候,让新类的命名与旧类完全无关,同时不返回原类,用户看到我们调用某个类却找不到该类在哪里定义的,通常的 IDE 对于这种做法完全无能为力。 更进一步,如果新类的类名是通过某种运算得到的,那么用户就算用搜索也找不到这个类定义的位置。 还有更坏的做法,可以挂羊头卖狗肉。比如实现了A类和B类,但是通过装饰器让A和B功能互换,接口却保持一致,一般人阅读代码时绝对想不到它们发生了这种变化。 最后,如果你想做这种坏事,要记得保护你的这个装饰器,把它混淆起来让人没办法阅读就对了。

使用Python发邮件(顺便写了一个小工具以方便实验室服务器运维)

前言: 命令行方式发邮件是非常重要的一个功能,搞过服务器运维的同学们肯定深有感触。如果一台服务器的 ip 设置为自动分配,服务器每次重启都会改变 ip ,经常去机房查ip是一件非常抓狂的事情。我今天参考了一些资料学习了一下 sendmail ,写了个小脚本,支持发送图片/附件/html等,可以用来发送日志等。 源代码在这里: https://github.com/the0demiurge/Notes/blob/master/Languages/Python/sendmail/sendmail.py 我基于这个函数做了一个自动获取IP(ifconfig)和服务器日志(dmesg)的小脚本,在这里: https://github.com/the0demiurge/Notes/blob/master/Linux/Server_Maintenance/sendmail.py 大致的用法: 只需要构造三个字典变量: sender: 记录发送者的信息,包括smtp服务器地址(比如qq,163什么的一般都会提供,不过需要在设置里面开启smtp才行) receivers: 记录收邮件的人的信息,可以指定多个邮件接收者 mail: 定义邮件的内容,包括附件等信息。 配置示例: sender = { ' address ' : ' sender@domain.tld ' , ' nickname ' : ' My Name ' , ' password ' : ' password ' , ' smtp_server ' : ' smtp.domain.tld ' , ' smtp_port ' : 465 , } receivers = [( ' Your Name ' , ' receiver@domain.tld ' )] mail = { ' content ' : ' Email Content ' , ' content_html ' : ...

此博客中的热门博文

最方便的电子词典库+macOS支持

MacBook日文键盘四种输入模式输入法切换(同样适用于其他布局的键盘)

[SOLVED] Supermicro cannot connect to VGA video port or iKVM