nodejs 源
npm --registry=http://registry.npm.taobao.orginstall -d)
pip源
网上有很多可用的源,例如豆瓣:http://pypi.douban.com/simple/
清华:https://pypi.tuna.tsinghua.edu.cn/simple
最近使用得比较多并且比较顺手的是清华大学的pip源,它是官网pypi的镜像,每隔5分钟同步一次,地址为https://pypi.tuna.tsinghua.edu.cn/simple
临时使用:
可以在使用pip的时候加参数-ihttps://pypi.tuna.tsinghua.edu.cn/simple
例如:pip install -ihttps://pypi.tuna.tsinghua.edu.cn/simplegevent,这样就会从清华这边的镜像去安装gevent库。
永久修改,一劳永逸:
linux下,修改 ~/.pip/pip.conf (没有就创建一个), 修改 index-url至tuna,内容如下:
[global]index-url = https://pypi.tuna.tsinghua.edu.cn/simple
windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下
[global]index-url = https://pypi.tuna.tsinghua.edu.cn/simple
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。总之前人留下的经验就是:保持一致性。要不全部用类名调用父类,要不就全部用 super,不要一半一半。
注意:super继承只能用于新式类,用于经典类时就会报错。
新式类:必须有继承的类,如果没什么想继承的,那就继承object
经典类:没有父类,如果此时调用super就会出现错误:『super() argument 1 must be type, not classobj』
super对象在搜索命名空间时,其实是基于类实例的mro进行。那么什么是mro呢?查找官方文档,有:
PyObject* tp_mro
Tuple containing the expanded set of base types, starting with the type itself and
ending with object, in Method Resolution Order.
This field is not inherited; it is calculated fresh by PyType_Ready().
super并非是一个函数,而是一个类(PySuper_Type)
Python 会计算出一个方法解析顺序(Method Resolution Order, MRO)列表,它代表了类继承的顺序,我们可以使用下面的方式获得某个类的 MRO 列表:
super 原理
super的工作原理如下:
def super(cls,inst):
mro=inst.__class__.mro()
returnmro[mro.index(cls)+1]
其中,cls 代表类,inst 代表实例,上面的代码做了两件事:
获取 inst 的 MRO 列表
查找 cls 在当前 MRO 列表中的 index, 并返回它的下一个类,即 mro[index + 1]
当你使用super(cls, inst)时,Python 会在 inst 的 MRO 列表上搜索 cls 的下一个类。
小结
事实上,super和父类没有实质性的关联。
super(cls, inst)获得的是 cls 在 inst 的 MRO 列表中的下一个类。