python类的__slots__属性、__del__属性、上下文(__enter__和__exit__)、
常规情况下,类的属性字典是共享的,而实例的字典是独立的。如果一个类的属性较少,但是拥有很多的实例,这些实例的属性字典会占用较多的内存空间。对这样的类来说,为了节省内存空间,可以使用__slots__类变量代替__init__()来存储数据属性。
定义__slots__之后,系统会为实例使用一种更加紧凑的内部表示,即通过一个很小的固定大小的数组来构建,而不是为每一个实例定义一个字典。
__slots__可以是列表、元组、字符串等可迭代对象
定义__slots__之后,类保留有__dict__,但实例没有,取代的是__slots__,且实例不能增加__slots__定义之外的属性。
class animal:
__slots__ = ('name','age')
def eat(self):
print('%s is eating'%self.name) cat=animal()
print(animal.__dict__)#类还是有__dict__的
# print(cat.__dict__)会报错,实例已经没有__dict__字典了
print(cat.__slots__) #('name', 'age'),只返回数据属性名称,不返回对应的值
cat.eat()
#cat.sex='male'会报错,不能为实例增加除了__slots__定义之外的属性了
__del__析构函数,在实例被删除、或者整个python文件执行完毕后自动执行,释放空间。
class test:
def __init__(self,name):
self.name=name
def __del__(self):
print('我执行啦') test1=test('haha')
del test1.name
print('------------')
# ------------
# 我执行啦
__enter__和__exit__
在通过类()对类实例化时,触发类的__enter__方法,操作错误或完毕触发__exit__方法
描述符:在一个类中,定义一个类属性为另一个类的实例,如下在B类中定义类属性x值为A的实例,则A类为描述符。
描述符中可定义__get__方法,获取值时触发,__set__方法,设置值时触发,__delete__删除值时触发。
如果A类中实现了__get__和__set__方法,那么A为数据描述符,如果没有实现__set__方法则为非数据描述符。
class A:
pass
class B:
x=A()
优先级:类属性>数据描述符>实例属性>非数据描述符>找不到
python类的__slots__属性、__del__属性、上下文(__enter__和__exit__)、的更多相关文章
- python类学习以及mro--多继承属性查找机制
版权声明:本文为博主原创文章,未经博主允许不得转载. 还记得什么是新式类和旧式类吗? Python中,一个class继承于object,或其bases class里面任意一个继承于object,这个c ...
- 第8.11节 Python类中记录实例变量属性的特殊变量__dict__
一. 语法释义 调用方法:实例. __dict__属性 __dict__属性返回的是实例对象中当前已经定义的所有自定义实例变量的名和值,用字典存储,每个元素为一个"实例变量名:值" ...
- python类的内置attr属性
class Foo: x=1 def __init__(self,y): self.y=y def __getattr__(self, item): print('----> from geta ...
- Python类的构成元素
类的构成元素 公共属性:实例化时无需__init__方法绑定到对象,就可以直接使用:普通属性:实例化时 需要__ini__方法绑定到对象之后,才可以直接使用:私有属性:__sex 双下滑杠开头,需要在 ...
- 第8章 Python类中常用的特殊变量和方法目录
第8章 Python类中常用的特殊变量和方法 第8.1节 Python类的构造方法__init__深入剖析:语法释义 第8.2节 Python类的__init__方法深入剖析:构造方法案例详解 第8. ...
- 一文讲全了Python 类和对象内容
摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan . Pytho ...
- python中函数和方法区别,以及如何给python类动态绑定方法和属性(涉及types.MethodType()和__slots__)
网上有很多同义但不同方式的说法,下面的这个说法比较让你容易理解和接受 与类和实例无绑定关系的function都属于函数(function): 与类和实例有绑定关系的function都属于方法(meth ...
- python 类的属性__slots__ (了解一点点)
当一个类需要创建大量实例时,可以通过__slots__声明实例所需要的属性, 优点: 1)更快的属性访问速度 2)减少内存消耗 3)限定一个类创建的实例只能有固定的实例属性(实例变量),不允许对象添加 ...
- Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
随机推荐
- [ Linux运维学习 ] 路径及实战项目合集
我们知道运维工程师(Operations)最基本的职责就是负责服务的稳定性并确保整个服务的高可用性,同时不断优化系统架构.提升部署效率.优化资源利用率,确保服务可以7*24H不间断地为用户提供服务. ...
- JMeter登录总是提示用户名不能为空的解决
已传入参数了呀,还是提示用户名不能为空 解决: 将url拼接上参数 --
- [LeetCode] 872. Leaf-Similar Trees_Easy tag: DFS
Consider all the leaves of a binary tree. From left to right order, the values of those leaves form ...
- [LeetCode] 598. Range Addition II_Easy tag: Math
做个基本思路可以用 brute force, 但时间复杂度较高. 因为起始值都为0, 所以肯定是左上角的重合的最小的长方形就是结果, 所以我们求x, y 的最小值, 最后返回x*y. Code ...
- vue 使用高德地图vue-amap组件
首先 npm install -S vue-amap 然后在 main.js import VueAMap from 'vue-amap'; //注意不要和 AMap原始名称覆盖 Vue.use ...
- iOS UI进阶-3.0 核心动画
Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.framework和引入对应的框架<Quar ...
- JAVA编程思想学习笔记5-chap13-15-斗之气5段
1.String对象不可变,一旦发生字符变换或者变长度,一定是新建了一个String private final char value[]; 2.字符串+与+=:唯二操作符重载 "aaa&q ...
- Python使用suds调用webservice报错解决方法:AttributeError: 'Document' object has no attribute 'set'
使用python的suds包调用webservice服务接口,报错:AttributeError: 'Document' object has no attribute 'set' 调用服务接口代码: ...
- LA 3890 Most Distant Point from the Sea(半平面交)
Most Distant Point from the Sea [题目链接]Most Distant Point from the Sea [题目类型]半平面交 &题解: 蓝书279 二分答案 ...
- PHP数据库环境配置
wamp环境 w是windows系统 a是Apache(服务器管理软件) m是MySQL(数据库) p是PHP wamp正常情况下是绿色的可以正常使用 黄色和红色不能使 ...