python中一切皆对象,
isinstance()判断某个对象是否为某个类的实例
issubclass()哦安短一个类是不是另一个类的子类
反射:
反省,对象具备一种修正错误的能力
hasattr 是否存在某个属性
getattr 获取某个属性的值
setattr 设置某个属性的值
delattr 删除某个属性
反省就是通过字符串操作属性
当不清楚对象细节时,就可以使用反省
在编写代码期间,明确知道访问的属性没有必要使用反射
不清楚时需要使用反射
可以通过反射的方式为对象增加一个方法,这样的方式增加的方法只是一个普通函数不会自动传值
前后都有双下划线的函数为内置函数,在特定时期自动执行,一般不会直接调用
当需要自定义打印显示内容时,需要覆盖__str__方法,该方法必须返回一个字符串
将一个对象转换字符串时本质就是在调用这个对象__str__方法
__del__当对象被从内存中删除时会自动执行,手动删除也会执行
python中1有自动内存管理机制,所以python自动创建的数据不需要操作,
当使用python打开不属于python管理的数据时,就需要使用__del__关闭系统资源
__del__被称为析构函数
exec:execute的缩写,执行,作用:帮助解析执行python代码,并将得到的名称存储到指定的名称空间
解释器内部也是调用它来执行代码的
参数一:需要一个字符串对象,表示要执行的python语句
参数二:是一个字典,表示全局名称空间
参数三:也是字典,表示局部名称空间
如果同时指定全局与局部,则会将字符串中表示名称解析后存到局部中
如果只传一个参数则将字符串中包含名称解析后存到全局中
一切皆对象,元类指用于产生类的类,type就是元类
所有的自定义类都是通过type实例化得来
创建模块的过程:
1.创建一个空的名称空间
2.执行内部的代码
3.将得到的名字放到名称空间中
类也是对象,使用type可以发现,类就是type类的实例(对象)
可以自己调用type来实例化产生一个类
类是由type实例化产生的
可以使用type产生一个类
一个类是由类名,类的父类元组,类的名称空间三个部分组成
__call__
在对象被调用时执行,
自定义元类的目的:
1.可以通过__call__来控制对象的创建过程
2.可以控制类的创建过程
自定义元类需要继承type
生成对象的三步
1.创建空对象
obj= object.__new__(self)
2.调用初始化方法
self.__init__(obj,*args,**kwargs)
3.得到一个完整的对象
return obj
当调用对象时,会执行该对象所属类中的__call__方法
要控制类的创建过程,只要找到类所属的类中的__init__即可
父类中创建子类对象所需的四个参数:
1.self,需要创建的类
2.类的名字
3.类的所有父类,类型为元组
4.这个类的名称空间
可以通过__doc__获取文档注释
也可以在类的__init__控制该类对象的创建过程
元类使用总结:
元类是用于创建类的类,使用元类是为了控制类的创建过程,以及类实例化对象的过程
一.
控制类的创建过程
1.创建一个元类(需要继承type)
2.覆盖__init__方法,该方法会将创建的对象,类名,所有父类,名称空间都传进来
可以利用这些信息进行控制过程
3.对于需要被控制的类,需要指定metaclass为上面的元类
二:
控制类实例化对象的过程
1.创建一个元类(需要继承type)
2.覆盖__call__方法,会将正在实例化对象的类调用类时传递的参数都传进去
3.在__call_-方法中,必须要编写模板代码
3.1创建空对象
3.2调用类的__init__方法来初始化这个空对象
3.3返回该对象
4.加入需要控制的逻辑
类的三个组成部分:
类名 父类门 名称空间
元类--->实例化产生----->类-------->实例化产生----------->对象
单例模式:
单个实例的模式,即一个类只有一个实例化对象
通过控制__call__方法实现
类有一个名为__init__()的特殊方法(构造方法),该方法会在类实例化时自动调用,类定义了__init__()的方法,类的实例化操作会
自动操作调用__init__()方法,该方法可以有参数