博文

目前显示的是 2022的博文

你绝对没想到的 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功能互换,接口却保持一致,一般人阅读代码时绝对想不到它们发生了这种变化。 最后,如果你想做这种坏事,要记得保护你的这个装饰器,把它混淆起来让人没办法阅读就对了。

外文阅读者的福音:生词提示功能

图片
 前言 某天浏览网页发现kindle有一个“生词提示”的功能,可以在英文书籍上面显示中文或英文释义,这样就免得查字典了。由于kindle上只有部分从商店购买的正版书支持该功能,在网上查询发现一个“wisecreator”可以让任意书籍支持生词提示。 只有kindle能用还不够,我也希望digital paper支持该功能,而digital paper只支持PDF。这时我想起以前在真白萌论坛看到有一种给汉字上加假名注解的方法,即html ruby标签,便写了一个简单的小工具自动为epub添加注解,然后使用calibre转换为PDF即可。 使用说明 for kindle 使用pip安装 wisecreator : git clone https://github.com/tmilovanov/wisecreator.git 装上还不能运行,参考 https://github.com/tmilovanov/wisecreator/issues/42 ,还需要替换wisecreator/third-party中的KindleUnpack为 这里的最新版 安装:pip install . 安装calibre(或它自带的ebook-convert) 然后就会出现一个wisecreator的命令,用它给mobi或azw3加入生词提示功能。 fore epub https://gist.github.com/the0demiurge/b88fd09221d205beb2b8fd5cdc17cc6f 装上依赖项,用python运行该代码即可。词典可以从 https://github.com/mahavivo/english-wordlists 下载,建议用GRE红宝书 NAME     add_annotations.py - dictionaries can be found at https://github.com/mahavivo/english-wordlists SYNOPSIS     add_annotations.py BOOK_PATH SAVE_PATH <flags> [DICT_LIST]... DESCRIPTION     add annotations for english words of zip-based ebooks such a

此博客中的热门博文

Flash被淘汰后打开swf文件的最佳方法

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

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