一、面向对象中的常用方法:
- isinstance(obj,类) 判断某个对象是不是某个类的实例。
- issubclass(子类,父类) 判断一个类是不是后面类的派生类(子类).
二、反射:程序应该要具备访问、检测、修正本身状态或者行为的能力。
面向对象中的反射是通过字符串的形式操作对象相关的属性。
(一切都是对象,都可以使用反射。类也是对象,类也可以使用反射。)
A. 四个反射(反省)的方式:(对类也适用)
1.hasattr(obj,’属性名’): 判断某个对象中是否有某个属性
返回值为布尔型。
2.getattr(obj,’属性名’,defaut) 获取属性值
如果有这个属性:
返回的是obj.属性名。如果属性书数据属性可直接访问,如果是方法,直 接加括号运行。
如果没有这个属性:返回defaut这个参数
3.setattr(obj,’属性名’’属性值) 设置属性(添加属性)
可以为对象添加属性:包括数据属性和函数。
4. delattr(obj,’属性名’) 删除某个属性
- 反射的作用:
1.反射用来可以实现插拔。(预留接口插入功能,或者删除功能)
2.动态导入模块(基于反射当前模块成员)
三、__getattr__,__delattr__,__setattr__(注意:必须设置参数,参考反射参数)
内置的__开头的函数,会在特定情况下自动执行代码。
如__init__函数会在调用,或者导入模块包时,自动执行。
__setattr__会在添加、修改属性的时候被触发。
__delattr__会在删除属性的时候被触发。
__getattr__只会在访问属性,且属性不存在的情况下才会触发。
__getattribute__只要访问属性,不能属性存不存在都会触发执行。
四、描述符(注意:必须设置参数,参考反射参数)
(注意:描述符当中的__set__()等必须有参数,否则报错,内置方法。)
在一个新式类中,包含了def __set__(self)或def __get__(self)或def __delete__(self)方法的就叫描述符,所以描述符的本质就是一个新式类。但是描述符(新式类)在操作自身属性时不触发,只有将描述符(这个新式类)组合到其他类中,对这个类进行属性操作,描述符才能够相应触发。
五、__init__、__str__、__call__、__del__的自动触发条件。
__str__是用来改变对象的值,print时触发,且返回值必须是字符串类型。