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删除属性时触发

 

posted @ 2022-01-18 15:13  哩子吖  阅读(40)  评论(0)    收藏  举报