day 22
day 22 classmethod,staticmethod,uuid,isinstance,issubclass,反射,魔法方法,单列
01.classmethod:一个类方法
- 是一个装饰器,可以装饰给类内部的方法,使该方法绑定给类来使用
- 类的绑定方法;由类来调用,会将类当作第一个参数传给该方法
- 主要用于编写源码
02.staticnethod;非绑定方法
- 是一个装饰器,可以装饰给类内部的方法,使该方法变成一个普通函数,可以不接收任何参数
03.uuid;生成字符串的加密模块
- uuid4;通过当前时间戳生成一串字符串
04.isinstance;用来判断对象是否为该类的实例
- Isinstance(对象,类) 判断参数1是否是参数2的一个实例
- 对象.__class__获取对象的类
05.issubclass;用来判断一个类是否为另一个的子类
- issubclass(类1,类2) 判断参数1是否是参数2的一个子类
06.反射
- 反射指的是通过字符串对,对象或类的属性进行操作
- hasattr(对象/类,属性名);判断属性;通过字符串,判断该字符串是否是对象或类的属性
- getattr(对象/类,属性名,默认值);获取属性;通过字符串,获取对象或类的属性,没有返回默认值
- setattr(对象/类,属性名,属性值);设置属性;通过字符串,修改对象或类的属性
- delattr(对象/类,属性名);删除属性;通过字符串,删除对象或类的属性
- 可以用来与用户交互
07.魔法方法(类的内置方法)
-
凡是在类内部定义的,以__属性名__方式的属性,都称之为魔法方法,又称为类的内置方法
-
魔法方法会在某些条件成立时触发.
-
__init__(self): # 在调用类时触发 __str__(self): # 在打印对象时触发,必须有字符串返回值 __del__(self): # 会在程序结束时触发,在垃圾回收机制将对象销毁前执行 __getattr__(self,item): # 在对象.属性,没有该属性时触发 __setattr__(self,key,value): # 在对象.属性=属性值时触发,不会再执行对象.属性=属性值 __call__(self, *args, **kwargs): # 在对象被调用时触发 __new__(cls,*more): # 会在__init__被执行前触发
08.单列模式
-
单个实例,对完全相同的对象只实例化一次
-
为了减少内存占用
-
在运行类内部__init__之前,先判断这个对象是否存在,存在直接返回该对象,不存在则实例化