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 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
随机推荐
- Elasticsearch6.13 升级6.24 单节点停机升级
Elasticsearch6.x 升级6.y 是支持滚动升级的,目前我们测试环境只有一个节点只能停机升级了 准备工作 禁用分片分配 curl -X PUT "localhost:9200/_ ...
- JMeter TCP性能测试
jmeter是一款纯java的性能测试工具,跨平台运行方便.提供图形化界面设置.简单易用. 在性能测试方法论中,很典型的方法就是二八原则,量化业务需求. 二八原则:指80%的业务量在20%的时 ...
- dubbo.provider和dubbo.consumer配置
Configure service provider <?xml version="1.0" encoding="UTF-8"?> <bean ...
- unity3d-游戏实战突出重围,第二天 制作血条
using UnityEngine; using System.Collections; public class xt : MonoBehaviour { //红色血条 public Texture ...
- 闪存卡被创建pv报错
背景:某机器有2块闪存卡,利用LVM,将其挂载到一个目录供测试使用: 之前厂商已经安装了闪存卡对应的驱动,fdisk可以看到闪存卡信息,但是在pvcreate创建时,遭遇如下错误: # pvcreat ...
- pytorch进行图像分类的流程,下一篇为实例源代码解析
一.预处理部分 1.拿到数据首先对数据进行分析 对数据的分布有一个大致的了解,可以用画图函数查看所有类的分布情况.可以采取删除不合理类的方法来提高准确率: 对图像进行分析,在自定义的图像增强的多种方式 ...
- Css预处理器---Less(一)
一.简介: Less是一种动态样式语言,可以在样式中使用变量,继承,运算,函数 二.使用 (1)客户端使用 //引入您的.less样式文件,rel属性区别去css为stylesheet/less &l ...
- LeetCode67.二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...
- 记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义
from:http://blog.csdn.net/feiyun0112/article/details/39697955 创建一个控制台程序和一个类库, 在控制台创建一个匿名对象,然后再在类库中访问 ...
- 恢复Windows10应用商店
用管理员权限运行powershell,输入 Get-AppxPackage -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode -R ...