# isinstance(object,cls)——————》判断object是不是cls的实例
# isinstance(sub,super)———————》判断sub类是不是super的子类
# 反射:自省的
# hasattr(obj,"属性")#obj.属性是否存在
# getattr(obj,"属性")#获取obj。属性,属性不存在就报错
# getattr(obj,"属性","默认值")#获取obj.属性,属性不存不会报错,返回默认值
# setattr(obj,"属性",“属性的值”)#obj.属性=属性值
# delattr(obj,"属性")#del obj.属性
#__getattr__ ,__setattr__ ,__delattr__:obj点的方式去操作属性时触发的方式
#__getattr__:obj.属性 不存在时触发
#__setattr__:obj.属性=属性的值时触发
#__delattr__:del.属性 时触发
##__getitem__ ,__setitem__ ,__delitem__
# obj[“属性”]方式去操作属性时触发的方式
#__getitem__:obj["属性 "]时触发
#__setitemr__:obj["属性 "]=属性的值 时触发
#__delitemr__:del["属性 "] 时触发
# __get__,__set__,__delete__
#描述符就是一个新式类,这个类至少要实现上述三个方法的一个
# class 描述符:
#def __get__():
# pass
#def __set__():
# pass
#def __delete__():
# pass
# class 类:
# name=描述符()
# obj=类()
# obj.name#get
# obj.name="zhangsahn"#set
#del obj.name #delete
#__del__:析构方法
#__str__ ,__repr__,__format__
#__slots__ :省内存的,属性都没有__dict__了
#__doc__ :查看文档信息
#__module__ :对象是在哪个模块 ;,__class__:对象是在哪个类里面的
#__del__
#__cal__:只要对象加(),那么调用的就是定义的cal方法
#__next__ 和 __iter__ 迭代器方法
# 要让对象能不for循环,则使用__item__方法就能迭代