咸阳制作网站,维港豪宅项目网站建设,有什么建设网站的书籍,新网站建设咨询目录
一、什么是__slots__
二、为什么用__slots__
三、刨根问底
四、__doc__ python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm1001.2014.3001.5502
一、什么是__slots__
__slots__是一个类变量#xff0c;变量值…目录
一、什么是__slots__
二、为什么用__slots__
三、刨根问底
四、__doc__ python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm1001.2014.3001.5502
一、什么是__slots__
__slots__是一个类变量变量值可以是列表元祖或者可迭代对象也可以是一个字符串(意味着所有实例只有一个数据属性)使用点来访问属性本质就是在访问类或者对象的__dict__属性字典(类的字典是共享的而每个实例的是独立的)
编辑
二、为什么用__slots__
字典会占用大量内存如果你有一个属性很少的类但是有很多实例为了节省内存可以使用__slots__取代实例的__dict__当你定义__slots__后__slots__就会为实例使用一种更加紧凑的内部表示。实例通过一个很小的固定大小的数组来构建而不是为每个实例定义一个字典这跟元组或列表很类似。在__slots__中列出的属性名在内部被映射到这个数组的指定小标上。使用__slots__一个不好的地方就是我们不能再给实例添加新的属性了只能使用在__slots__中定义的那些属性名。
class Foo:__slots__xf1Foo()
f1.x1
f1.y2#报错
print(f1.__slots__) #f1不再有__dict__class Bar:__slots__[x,y]nBar()
n.x,n.y1,2
n.z3#报错
注意__slots__的很多特性都依赖于普通的基于字典的实现。另外定义了__slots__后的类不再 支持一些普通类特性了比如多继承。大多数情况下你应该只在那些经常被使用到 的用作数据结构的类上定义__slots__比如在程序中需要创建某个类的几百万个实例对象 。关于__slots__的一个常见误区是它可以作为一个封装工具来防止用户给实例增加新的属性。尽管使用__slots__可以达到这样的目的但是这个并不是它的初衷。它更多的是用来作为一个内存优化工具。
三、刨根问底
class Foo:__slots__[name,age]f1Foo()
f1.namealex
f1.age18
print(f1.__slots__) [name, age] f2Foo()
f2.nameegon
f2.age19
print(f2.__slots__) [name, age] f1与f2都没有属性字典__dict__了统一归__slots__管节省内存
print(Foo.__dict__) {__module__: __main__, __slots__: [name, age], age: member age of Foo objects, name: member nam 四、__doc__
返回类的注释信息
class Foo:我是描述信息passprint(Foo.__doc__) 我是描述信息 该属性无法被继承
class Foo:我是描述信息passclass Bar(Foo):pass
print(Bar.__doc__) #该属性无法继承给子类 None