__dict__
- 类调用__dict__属性,返回类属性和方法的字字典
- 实例调用__dict__属性,返回实例相关的属性和方法
1. __dict__ 有什么用?基本定义是啥?
- python 中__dict__存储了该对象的一些属性
- 类和实例分别拥有自己的__dict__
- 在__init__中声明的变量,会存到实例的__dict__中
2.举个例子
类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的
3.Python里哪些没有__dict__属性
虽然说一切皆对象,但对象也有不同,就好比不是每个人的女朋友都是一个人一样,一些内置的数据类型是没有__dict__属性的
int, list, dict等这些常用的数据类型是没有__dict__属性的,其实这是可预料的,就算给了它们dict属性也没啥用,毕竟它们只是用来做数据容器的。
4.有继承关系的时候,来看看各自的__dict__
__slots__
- 默认情况下,类的实例有一个字典用于存储属性,这对于具有很少实例变量的对象会很浪费时间。当创建大量实例时,空间消耗可能变得尖锐。
- 可以通过在类中定义__slots__声明接收一个实例变量序列,并在每个实例中只保留足够保存每个变量值的空间。因为没有为每个实例创建__dict__,所以节省空间
class Base: # 指定类对象所能绑定的属性,限制类属性,Base类只能绑定name属性,其他属性绑定不上 # 节约内存:定义了slot属性之后,那么该对象不会再自动生成__dict__属性 __slots__ = ['name'] def __init__(self, name): self.name = name b = Base('aa') # b.age = 10 'Base' object has no attribute 'age' # 'Base' object has no attribute '__dict__' print(b.__slots__)