python解释器
用的比较多的就是cython,但由于GIL的存在,让其无法像编译型语言那样做真正意义上的多线程。
魔法方法
魔法方法指的是一些双下划线的方法,这些方法往往是解释器使用,可以对应到Python里的一些语法行为。比如“init”、“str”、“bool”、"next"等。(下划线在csdn里的md编辑器直接变成了加粗,有点尴尬-_-!)
常见魔法方法
init:
初始化函数,在创建实例对象为其赋值时使用,在__new__之后,__init__必须至少有一个参数self,就是这个__new__返回的实例,__init__是在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值。
new:
很多人认为__init__是类的构造函数,其实不太确切,__init__更多的是负责初始化操作,相当于一个项目中的配置文件,__new__才是真正的构造函数,创建并返回一个实例对象,如果__new__只调用了一次,就会得到一个对象。
继承自object的新式类才有__new__这一魔法方法,__new__至少必须要有一个参数cls,代表要实例化的类,此参数在实例化时由Python解释器自动提供。
__new__必须要有返回值,返回实例化出来的实例(很重要),这点在自己实现__new__时要特别注意,可以return父类__new__出来的实例,或者直接是object的__new__出来的实例,若__new__没有正确返回当前类cls的实例,那__init__是不会被调用的,即使是父类的实例也不行。
__new__是唯一在实例创建之前执行的方法,一般用在定义元类时使用。
创建对象的步骤:
- 首先调用__new__得到一个对象
- 调用__init__为对象添加属性
- 将对象赋值给变量
class:
获得已知对象的类 ( 对象.__ class __),可以用于访问或者修改类的变量。
str:
在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息,__str__方法必须要return一个字符串类型的返回值,作为对实例对象的字符串描述
repr:
如果说__str__体现的是一种可读性,是给用户看的,那么__repr__方法体现的则是一种准确性,是给开发人员看的,它对应的是repr()函数,重构__repr__方法后,在控制台直接敲出实例对象的名称,就可以按照__repr__中return的值显示了
其他:
如__del__,释放资源用,无需重写
如__getattribute__,可用于拦截属性并重写
如__bases__,获取父类
如__mro__,获取集成脉络和顺序
如__call__,实例对象以()的形式被调用
如__slots__,一种魔法属性
如__all__,可以用__all__=[‘函数名或方法名’]的方式限制一下哪些函数或方法可以被导入,只针对通过 from xx import *这种导入方式有效
装饰器
项目中时常要用到线程的概念,在代码中遇到了用装饰器的做法,来给用到多线程的地方添加线程,这里就补充一下装饰器的知识。
装饰器更多的像是打包了其他函数作为一种新的函数出现在代码中,与functool.partial的形式很像。
纯函数
转载:https://blog.csdn.net/udadau/article/details/105380221