C++和python的变量对比
《C++中的this和Python的self对比》基本都是针对函数而言的,从变量的角度看,也有相同之处。
C++中,类中定义的变量一般叫做成员变量,或者说是成员属性,它只属于实例对象,只有实例对象才能用。加上了static关键字才是给类用的 称之为静态变量。
而python不同,实例对象调用属性时,首先是看自身是否已经构建了该属性,如果有就用,如果没有还会去类属性里找, 如果类里有,会直接自动创建一个和类名相同的变量(不会报错,而是自动创建一个同名而没有关系的变量)。初始值和该类属性相同。
#实验例子: class Stack:
y = 1
def test(x):
print("y",x.y)
x.y = 10 s = Stack()
s.test() ##看看该句,屏蔽和不屏蔽有何不同
print('s.y = ',s.y)
#print('Stack.y = ',Stack.y)
#print('Stack().y = ',Stack().y)
print(type(Stack))
print(type(Stack()))
print(type(s))
print(id(Stack))
print(id(Stack()))
print(id(s))
如果s.test()被屏蔽程序就会报错。根据《C++中的this和Python的self对比》中讲到
如果是已实例调用方法,会自动传入实例的“指针”self,
那么调用s.test() 其实就是 执行了 self.y = 10, 这就构建了一个实例变量y。
如果不调用s.test() ,就相当于没有构建实例变量y。那边实例就会去类中找y并将值和类中的y此时的值一致。
//----------------------------分割线-----------
还有一个问题就是,类属性和实例属性的构建时间。
对于python而言,类属性在类定义之后也构键好了,但是在成员定义之后成员属性并没有构建!这是为什么呢?
原因:
因为python不用声明变量,或者说它的声明、定义、和初始化是一步到位的。而实例属性的定义,只能是显性的通过实例对象来定义(如self.name),
换句话说实例属性的定义只能在类方法中进行。所以如果该函数没有被调用,那么方法中的该实例属性就不会被构建!
所以,如果想在构建实例的时候,就想把实例的属性都构造好,那么就必须把实例的属性的定义放在__init__方法中, 这样,在构建实例的时候,会自动调用__init__方法,这样就能确保实例属性被造。
对于C++而言,类属性在类定义之后就构成好了这和python一样,而成员属性,在成员定义之后成员属性也会构建好(构建的意思就是分配内存空间)
至于,方法内定义的变量都是属于函数的局部变量,也是只有调用函数的时候才会分配空间。还有C++的类定义就只能是定义,成员变量此时是不能初始化的,初始化只能放在构造函数里等待实例被构造的时候初始化。如果不初始化成员变量的值,就会是定义时分配的内存中的值。
还有,C++的类属性,也就是静态属性,他的初始化应该是在定义全局变量的位置,初始化的方法为:int A::s = 0; (A是类名,s是静态属性, 要注意是,此时初始化的过程还必须带上变量类型!访问静态方法也好,访问静态属性也好,都是类名加双冒号实现!)
//----------------------------分割线-----------
总结:不管是C++还是python都大致分为3种变量/属性:(叫法我随便说的,不要在意)
1、类属性(C++中叫静态变量,python中叫类属性)
2、实例属性(C++中叫成员变量,python中叫成员属性)
3、局部变量(C++中叫局部变量,python中叫局部变量)
python编译如何区分这三种变量/属性?
答:
1、声明在类中,且在方法的外部的属性就是类属性。
2、声明在方法内部,且有实例前缀的属性就是实例属性
3、声明在方法内部,且没有实例前缀的属性就是局部变量
C++编译如何区分这三种变量/属性?
答:
1、声明在类中,且在方法的外部的带static关键字的属性是类属性。
2、声明在类中,且在方法的外部的不带static关键字的属性是实例属性。
3、声明在方法内部,就是局部变量
C++和python的变量对比的更多相关文章
- Go/Python/Erlang编程语言对比分析及示例
本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴 ...
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
Go/Python/Erlang编程语言对比分析及示例 本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...
- 配置python环境变量(转)
默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1.首先需要在系统中注册python环境变量:假设python的安装路 ...
- python学习 变量的操作 与 基本数据类型
一变量(本文使用python3.5): #变量:是计算机内存中的一块区域,变量可以存储规定范围内的值,变量可以改变#在python中变量是计算机内存中数据的引用 python的变量没有明显的类型,具体 ...
- python的变量传递
python中变量都被视为对象的引用.python函数调用传递参数的时候,不允许程序员选择传值还是传引用,python参数传递采用的都是“传对象引用”的方式. 这种方式相当于传值和传引用的结合 ...
- Python中变量的作用域(variable scope)
http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...
- Windows下python环境变量配置
默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1. 首先需要在系统中注册python环境变量:假设python的安装 ...
- windows7下python环境变量配置
默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行或cmd里直接使用python命令. 1. 首先需要在系统中注册python环境变量:假设pyth ...
- FAQ:Python环境变量配置
Python安装安装成,需要配置环境变量: 默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1. 首先需要在系统中注册 ...
随机推荐
- webpack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- 团队项目个人进展——Day06
一.昨天工作总结 冲刺第六天,深入学习了小程序官方文档,并看了几节小程序教程的视频 二.遇到的问题 对文档中的内容只是熟悉,理解并运用起来还存在问题 三.今日工作规划 学习微信小程序中WebSocke ...
- 详解JNDI的lookup资源引用java:/comp/env
ENC的概念: The application component environment is referred to as the ENC, the enterprise naming c ...
- springMvc之文件上传与下载
我们经常会使用的一个功能是文件下载,既然有文件下载就会有文件上传,下面我们来看一下文件上传是如何实现的 首先准备好一个页面 <style type="text/css"> ...
- 【MySQL 5.7 Reference Manual】15.4.2 Change Buffer(变更缓冲)
15.4.2 Change Buffer(变更缓冲) The change buffer is a special data structure that caches changes to se ...
- 500.19 ,错误:4.00x80070005
直接把网站根目录添加上everyone权限即可
- Beyond Compare 4 使用方法
一 : 二 : 三 :
- Python中的分组函数(groupby、itertools)
from operator import itemgetter #itemgetter用来去dict中的key,省去了使用lambda函数 from itertools import groupby ...
- md5sum 和 sha256sum用于 验证软件完整性
md5sum 和 sha256sum 都用来用来校验软件安装包的完整性,本次我们将讲解如何使用两个命令进行软件安装包的校验: sha 是什么? sha 为 安全散列算法(英语:Secur ...
- 数值分析 最小二乘 matlab
1. 已知函数在下列各点的值为 -1 -0.75 -0.5 0 0.25 0.5 0.75 1.00 0.8125 0.75 1.00 1.3125 1.75 2.3125 分别用一次.二次. ...