修改计算机属性中的内存大小_Python 类属性的动态特点

#编程教育#

Python是一门动态语言,所以它的属性都是在程序运行过程中动态引入的。一个类实例占用的内存大小也是动态变化的。这点和编译性语言是完全不同的。例如C++是一门编译性语言,它在程序运行之前需要经历编译阶段,那么一个类实例的内存大小在编译期间就已经确定下来了,并不会在运行期动态变化。下面我们通过一个简单的例子,来讲解一下python类属性的动态特点。

1. class base:2.     def __init__(self):3.         self.__age = 234.     def setHeight(self, height):5.         self._height = height6.     def getHeight(self):7.         return self._height8. base_instance = base()9. base_instance.setHeight(194)10.base_instance.name = 'hello'
e9c1ac3c176e6b6963d016913caddbe6.png

程序运行到第8行,base类实例内存结构

a31a097c7882d1070ed13d7a398445c4.png

程序运行到第9行,base类实例内存结构

1c34d9f7e9c4b69752e63474081d58c5.png

程序运行到第10行,base类实例内存结构

上例中,第8行创建base实例,此时base实例内存中只有self.__age这个属性,并没有其他属性,因为这个属性在类的构造函数__init__定义了,所以在实例生成之时,该属性也就被初始化了,自然也就包含在内存中了。接下来,当运行第9行时,setHeight()函数被调用,self_height属性被初始化,此时base实例内存中才新增加了_height属性。这里__age, _height都是protected属性,因为其属性名称前有下划线。其中__age更特殊一些,它前面有两条下划线,这是python语言实现私有成员的一种方式,针对双下划线的属性,在运行时会被转化成(_className__attributeName)的格式,避免外部通过“.”操作符来直接获取属性值。当程序运行到第10行后,base实例内存中又增加了公有的name属性,这个属性在类定义中并没有,而是在类外部定义的,在类实例生成之后,通过点操作符“.”来给类实例动态添加属性。当然我们并不鼓励最后这种做法,应为它并不符合类封装性的要求。但是从这些特点,我们确实可以看出python作为动态语言的灵活性。

这就是Python作为动态语言的一个特性,它的内存管理更加灵活。当然也有相应的缺点,就是它不能像C++语言那样,在编译期间就能检查出程序错误,只有程序运行之后才能发现错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生成的头_Python爬虫偷懒神器!快速一键生成Python爬虫请求头

今天介绍个神奇的网站!堪称爬虫偷懒的神器!我们在写爬虫,构建网络请求的时候,不可避免地要添加请求头( headers ),以 mdn 学习区为例,我们的请求头是这样的:一般来说,我们只要添加 u…

单选按钮带文字_一分钟教会你用Word添加单选框和复选框

又到学习Word技巧的时候啦!学了这么长时间,你的技能点有没有增加呢?对表格的使用有没有更加熟练了?是否很好奇别人家的表格是怎么弄成可以单选框和复选框的效果呢~~~~下面让小编带你解锁新姿势~效果图如下:(1)开发工具…

python二维数组换行输出_关于用python绘制二维数组的问题

我有一个关于用matplotlib绘制二维数组的问题。在我的代码中,我有一个2D数组,名为len(z)20,z的值为:[[ 642.3774486 662.59980588 706.80142179 764.78786911 831.67963477904.67872269 982.01426528 1062.49208551 1145.27029231 1229.735499671315.42936618 1402.00251422 14…

excel中线性函数_Excel中特别有用的不常用函数之Indirect函数

今天介绍一下Indirect函数。这个函数属于特别有用的一个函数,但是很多人并不太了解它的作用。今天我们就详细介绍一下。01INDIRECT函数的工作方式这个函数的语法特别简单:INDIRECT(ref_text,[a1])一般可以不用管第二个参数(缺省即可,表示单元…

橡胶柱压缩_你玩俄罗斯轮盘吗?剪切安全气囊压缩气瓶的隐患及注意事项

剪切气囊压缩气瓶的隐患大约 16 年前,当我开始在消防部门工作时,我们了解到:不要剪切安全气囊的压缩气瓶,不要靠近安全气囊的撞击区域,因为它们会让你丧命。那时,我只是接受了这一事实,从未想过…

arduino naon介绍_Arduino Nano 自制版

材料清单1、Atmega 328P-AU芯片2、16MHz晶振(CSTCE16M0V53-R0)3、电阻包2X4 - 1k欧姆(0603)4、AMS1117 5V稳压器5、FT232RL - FTDI芯片USB转UART6、LED灯黄、绿、红(0603)7、500mA保险丝(0603)8、100nF电容(0603)9、4.7uF电容(1206)10、1uF电容(0603)11、B2 二极管12、USB mini…

python解放二次开发_[转载]Python二次开发程序详解

######################################## Fundamentschwingungsstudie #### nur geeignet fuer ABAQUS6.4-1 #### erstelltvon D.Chen in 2009 #########################################开头的为注释行.第一步, 建立建模环境, 这一步中py将从abaqus中导入建模所需的所有程序…

ev10aq190a采集电路图_EV10AQ190A数模转换器

EV10AQ190A ADC是一个带有四个独立数字可编程10位1.25 GSPS ADC通道的单片机。当交织时,它可以提供两个通道x 2.5gsps或一个通道x5gsps的数据转换速率。四个adc由四个10位adc组成。这些核心可以独立考虑(四通道模式),也可以由两个X 2核心(两通道模式&…

回放导出数据_王者荣耀本地视频怎么导出MP4格式视频文件?答案在这里

王者荣耀保存的视频在哪看?在你的游戏中出现了精彩五连杀或者你成为MVP后,想要将视频记录下来回放结果发现不知道在哪里看已经录下来的视频,这里我就来告诉大家怎么回看王者荣耀中录下来的视频,由于游戏中的视频保存是属于缓存,因此手机缓存一旦没了这些…

怎么复活不了睡袋_测评 | 萌新的北京冬季户外睡袋初体验

寒冷的冬天到来,你躺在家里可以享受席梦思大棉被,但躁动的心让你想要到外面去看看,大棉被虽然舒服却又厚又重无法带到户外。帐篷是你在户外的小家,睡袋就是那一床温暖的被子。户外出行,不晓得户外睡袋重要性的驴友不是…

获取行信息_论文推荐 | 周乐韬,黄丁发,袁林果,等:基于状态和残差的北斗基准站观测数据表达与信息分级...

《测绘学报》构建与学术的桥梁 拉近与权威的距离复制链接,关注《测绘学报》抖音!【测绘学报的个人主页】长按复制此条消息,长按复制打开抖音查看TA的更多作品##7NsBSynuc88##[抖音口令]本文内容来源于《测绘学报》2020年第10期,审…

均衡原理_干货什么是负载均衡?负载均衡原理详解

负载均衡是高可用网络基础架构的一个关键组成部分,有了负载均衡,我们通常可以将我们的应用服务器部署多台,然后通过负载均衡将用户的请求分发到不同的服务器用来提高网站、应用、数据库或其他服务的性能以及可靠性。下面看一个不使用负载均衡…

服务器推送_初探 Watermill 构建 Golang 事件驱动程序,SSE 进行 HTTP 服务器推送

使用 SSE(Server-Sent Events) 进行 HTTP 服务器推送这个示例是一个类似 twitter 的 web 应用程序,使用 Server-Sent Events 来支持实时刷新。运行docker-compose up然后, 浏览 http://localhost:8080您可以添加自己的帖子或点击按钮获得随机生成的帖子。无论哪种方…

mysql 5.6 生产my.cnf_一个生产可用的mysql参数文件my.cnf

[client]#客户端选项设置#设置客户端和连接字符集default_character_set utf8port 3306socket /opt/mysql-5.6.24/tmp/mysql.socket[mysqld]#服务器端选项设置# innodb设置default_storage_engine InnoDBinnodb_strict_mode 1innodb_buffer_pool_size 256M #mysql数据库服…

extends 抽象方法_关于abstract抽象类的理解

abstract:抽象类不能被实例化(new),包含属性、方法、构造器(此构造器不用来初始化实例,只用来被子类调用,其构造函数是提供给子类创建对象的时候初始化父类的属性的),故只…

streaming接mysql数据库_[Spark streaming举例]-- 实时统计并且存储到mysql数据库中

举例package com.scala.myimport org.apache.spark.SparkConfimport org.apache.spark.streaming.Durationsimport org.apache.spark.streaming.StreamingContext/**** author root* 测试步骤:* 1\打开h15\h16\h17\h18,启动zookeeper,再启动hadoop集群…

mysql更新id最大_我们可以在单个MySQL查询中更新具有最高ID的行吗?

是的,我们可以做到。让我们首先创建一个表-mysql> create table DemoTable(ID int,GameScore int);使用插入命令在表中插入一些记录-mysql> insert into DemoTable values(15,848747);mysql> insert into DemoTable values(13,909049);mysql> insert in…

三张表有重复字段_什么?搞不定Kafka重复消费?

点戳蓝字“架构之美”关注我们哦!前言 今天我们聊一个话题,这个话题大家可能在面试过程中,或者是工作当中经常遇到 ?如何保证 Kafka 消息不重复消费?我们在做开发的时候为了程序的健壮性,在使用 Kafka 的时候一般都会…

如何利用扩展欧几里得算法求解不定方程_欧几里德算法、拓展欧几里德、中国剩余定理...

01.欧几里德算法(Euclidean algorithm)(辗转相除法)欧几里德算法又称辗转相除法,主要是用于计算两个整数a,b的最大公约数。简单点说一下算法原理:两个整数的最大公约数等于其中小的那个数跟大除以小余数的最…

mysql 先删后增 更新_MySQL 高级操作——新增数据、更新数据、删除数据、查询数据...

新增数据多数据插入只要写一次insert指令,但是可以插入多条记录语法:insert into 表名 [(字段列表)] values (值列表1),(值列表2),(值列表3);主键冲突主键冲突,在有的表中,使用的是业务主键(字段有业务含义),但是往往在…