面向对象小结
__init__和__call__的区别
1、__init__()的作用是初始化某个类的一个实例,等同于类的构造器
2、__call__()的作用是使实例化能够像函数一样被调用,同时不影响实例本身的生命周期(__call__()不影响一个实例的构造和析构,但是__call__()可以用来改变实例的内部成员的值)
__doc__():类的注释,无法继承给子类
__str__():对象()会自动执行
__add__():对象+对象,会自动执行
__getitem__():对象[key]会自动执行
__setitem__():对象[key]=value会自动执行
__delitem__():del对象[key]会自动执行
__init__和__new__的区别
1、__new__是在实例化创建之前被调用的,因为它的任务就是创建实例然后返回该方法
2、__init__是当实例对象创建完成后被调用,然后设置对象属性的一些初始值,没有返回值,是一个实例方 法,即当创建一个新实例时,先调用__new__,再调用__init__。__new__的返回值(实例)将传递给 __init__方法的第一个参数,然后__init__给这个实例设置一些初始参数
需要区分:
__setitem__:对象[key]=value触发
__getitem__:对象[key]触发
__setattr__:对象.key=value触发
__getattr__:对象.key触发
面向对象的反射函数做区分:
hasattr(object,name):查看对象中是否含有name属性/方法,返回布尔值
getattr(object,name):从object中获取name属性/方法
setattr(object,name,value):给object设置name=value
delattr(object,name):删除object中name
isinstance():检查对象是否是类的对象,返回True或False
issubclass():检查一个类是否是另外一个类的子类,返回True或False
既然选择了远方,只能风雨兼程