Python高阶 -- 数据和自省
类里面定义的变量叫做类属性,类属性又分为私有属性和公有属性
类属性可以通过类和实例对象去访问
私有属性:
-- 单下划线开头:_attr
-- 双下划线开头:__attr
私有属性也能继承
__dict__:
-- 类调用__dict__属性,返S类属性和方法的字典
-- 实例调用__dict__属性,返回的值实例相关的属性和方法,如查看类的所有属性和方法:print(Test.__dict__)
-- 子类继承父类后,查看子类的所有属性和方法不再生成__dicit__属性
内置属性:__slots__
指定类对象所能绑定的属性,其它的属性就不能在init中新增了,限制属性,节约了内存
默认情况下,类的实例有一个字典用于存储属性,这对于具有很少实例变量的对象会浪费空间。可通过在类定义中定义__slots__来覆盖默认__dict__行为。__slots__声明接收一个实例变量序列,并在每个实例中只保留足够保存每个变量值的空间,因为没有为每个实例创建__dict__,所以节省空间
__slots__不能继承的,只对当前这个类有作用;
自定义属性访问
object.__getattr__:没有找到属性时,触发AttributeError异常时会调用此方法,当属性查找在通常的地方没有找到该属性时调用
object.__getattribute__:查找属性时,第一时间会调用该方法
object.__setattr__:设置属性时,调用该方法设置属性
object.__delattr__:在del_obj.attr删除属性时触发
有更好的建议,欢迎留言啊~