python中__slots__节约内存的具体做法
说明
1、利用_slots__类属性,可以将实例属性存储在元zu中,大大节省了存储空间。
2、所有属性都必须定义为__slots__元组,子类还必须定义__slots__。
实例如果支持弱引用,需要在__weakref中添加__slots__。
实例
class Vector2d:
__slots__ = ('__x', '__y')
typecode = 'd'
知识点扩展:
__slots__
如果在一个类中定义了__slots__属性,那么这个类的实例将不会拥有__dict__属性,没有__dict__的实例也就不能添加实例属性了。简单来说,__slots__的作用就是阻止类在实例化时为实例分配__dict__属性,限制该实例能添加的属性。
作用
通常情况下实例使用__dict__来存储自己的属性,它允许实例动态地添加或删除属性。然而,对一些在编译期就已经知道有什么变量的类或者不允许动态添加变量的类来说,它们并不需要动态地添加变量。如果想要限制实例属性,不想让它动态添加属性怎么办?比如我们只允许对A的实例添加name和age属性。
为了达到上述目的,Python允许在定义class的时候,定义一个__slots__变量,来限制该class的实例能添加的属性。
class A(object):
__slots__ = ('age','name')
a = A()
a.name = 'xiaoming'
a.age = 10
a.id = 123456 #error AttributeError: 'A' object has no attribute 'id'
由于id不在__slots__中,所以实例不能添加id属性。任何试图给实例添加一个其名不在__slots__中的属性都将触发AttributeError异常。
以上就是python中__slots__节约内存的具体做法的详细内容,更多关于python中__slots__如何节约内存的资料请关注脚本之家其它相关文章!
相关文章
关于python中readlines函数的参数hint的相关知识总结
今天给大家带来的是关于Python函数的相关知识,文章围绕着python中readlines函数的参数hint展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下2021-06-06
python 使用xlsxwriter循环向excel中插入数据和图片的操作
这篇文章主要介绍了python 使用xlsxwriter循环向excel中插入数据和图片的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-01-01
python中用cantools和can工具包解析blf文件的方法
这篇文章主要给大家介绍了关于python中用cantools和can工具包解析blf文件的相关资料,blf数据不像mf4那样自带信号数据库,因为它是记日志用的,一般情况下要尽可能的小,需要的朋友可以参考下2023-09-09


最新评论