python中类变量,成员变量
2024-09-30 15:36:54
参考文献:http://www.jb51.net/article/54286.htm
转载、引用请附上参考文献的链接。
(1)位置的区别
先看看下面这段代码:
class TestClass(object):
val1 = 100 def __init__(self):
self.val2 = 200 def fcn(self,val = 400):
val3 = 300
self.val4 = val
self.val5 = 500
if __name__ == '__main__':
inst = TestClass() print TestClass.val1
print inst.val1
print inst.val2
print inst.val3
print inst.val4
print inst.val5
这里,val1是类变量,可以由类名直接调用,也可以有对象来调用;
val2是成员变量,可以由类的对象来调用,这里可以看出成员变量一定是以self.的形式给出的,因为self的含义就是代表实例对象;
val3不是成员变量,它只是函数fcn内部的局部变量;
val4和val5也都不是成员变量,虽是以self.给出,但并没有在构造函数中初始化。
(2)如何修改这些变量、类变量和C++中的静态变量的区别
再看看下面的代码(#号后面的是运行结果):
inst1 = TestClass()
inst2 = TestClass() print TestClass.val1 #
print inst1.val1 # inst1.val1 = 1000
print inst1.val1 #
print TestClass.val1 # TestClass.val1 =2000
print inst1.val1 #
print TestClass.val1 # print inst2.val1 # 2000 inst3 = TestClass()
print inst3.val1 #
可以发现:python的类变量和C++的静态变量不同,并不是由类的所有对象共享。类本身拥有自己的类变量(保存在内存),当一个TestClass类的对象被构造时,会将当前类变量拷贝一份给这个对象,当前类变量的值是多少,这个对象拷贝得到的类变量的值就是多少;而且,通过对象来修改类变量,并不会影响其他对象的类变量的值,因为大家都有各自的副本,更不会影响类本身所拥有的那个类变量的值;只有类自己才能改变类本身拥有的类变量的值。
最新文章
- react-echarts之折线图的显示
- 移动端阻止body滚动
- (转) How to Train a GAN? Tips and tricks to make GANs work
- Effective Objective-C 2.0 — 第二章 对象、消息、运行期 - 第六条:理解“属性”这一概念
- 【实(dou)力(bi)首(mai)发(meng)】第四次CCF软件能力认证题解
- Kd-tree算法原理
- 李洪强漫谈iOS开发[C语言-042]-简单计算器
- How to enable $Admin Shares in Windows 7
- [转载]MongoDB开发学习(1)开天辟地,经典入门
- 后台数据download成excel的方法(controller/action)
- 模拟一个shuffle
- 将逗号分隔 的字符串转化成List
- 找到链表的倒数第K位
- Swift基础之对FMDB第三方的使用方法
- Python os.removedirs() 和shutil.rmtree() 用于删除文件夹
- gcd以及exgcd入门讲解
- no_namespace rename 在C++中是什么意思啊
- java与C++相比增加和缺少的特性--持续更新
- Java 之集合框架 中(10)
- Vue2.5入门-3
热门文章
- [PyTorch]PyTorch/python常用语法/常见坑点
- Python 实现C语言 while(scanf(";%d%d";, &;a, &;b) != EOF) 语句功能
- jmeter随笔
- 解决httpclient因为保持永久长连接造成连接吊死的问题
- 《Think in Java》(十七)容器深入研究
- 实例化后的map的默认值
- zsh 安装powerline 主题特效
- python 爬虫005-爬虫实例
- yii2手动添加插件PHPExcel
- Ansible 小手册系列 七(Ad-hoc)