Python中的类变量在子父类中被修改时引起的变化
来源:互联网 发布:linux vi命令日志 编辑:程序博客网 时间:2024/05/18 01:54
运行结果是:
# -*- coding: utf-8 -*-"""Created on Thu Dec 7 20:29:58 2017@author: Administrator"""class Parent( object): x = 1 class Child1( Parent): passclass Child2( Parent): passprint ( Parent.x , Child1.x , Child2.x)Child1.x = 2print( Parent.x , Child1.x, Child2.x)Parent.x = 3print( Parent.x, Child1.x, Child2.x)
为什么最后一行的输出是 3 23 而不是 3 2 1 ?
为什么改变了Parent.x 的值还会改变 Child2.x 的值,但是同时Child1.x 值却没有改变?
这个答案的关键是,在Python 中,类变量在内部是作为字典处理的。如果一个变量的名字没有在当前类的字典中发现,将搜索祖先类(比如父类)直到被引用的变量名被找到(如果这个被引用的变量名既没有在自己所在的类又没有在祖先类中找到,会引发一个AttributeError 异常)。
因此,在父类中设置x = 1 会使得类变量 x 在引用该类和其任何子类中的值为 1 。这就是因为第一个 print 语句的输出是 1 1 1。
随后,如果任何它的子类重写了该值(例如,我们执行语句 Child1.x = 2 ),然后,该值仅仅在子类中被改变。这就是为什么第二个 print语句的输出是 1 2 1 。
最后,如果该值在父类中被改变(例如,我们执行语句Parent.x = 3 ),这个改变会影响到任何未重写该值的子类当中的值(在这个示例中被影响的子类是 Child2 )。这就是为什么第三个 print 输出是 3 2 3 。阅读全文
0 0
- Python中的类变量在子父类中被修改时引起的变化
- 注意!!变量在变化!!
- 如何修改const类中的变量(或在const函数中修改变量)
- c#引用类型变量在程序中的变化
- 一个基本类型在方法中修改引起的思考
- ref C#中的ShowDialog和Show的区别 为什么再ShowDialog中修改变量时原窗口中的变量不会被改变 out如何在这里应用
- 蜂鸟算法在谷歌15岁生日发布引起搜索引擎的哪些变化
- 调试mfc控件时不能看见变量的值,或者变量的值总在莫名变化
- php变量 在4.1.0前后的一些变化
- python变量在计算机内存中的表示
- Python变量在计算机内存中的表示
- python 变量在计算机内存中的表示
- 滑块的变化引起图片大小的变化
- activity透明主题引起生命周期的变化
- python常见变量的定义,引用,修改
- 使用指针在类外修改类的私有变量
- Python中的类变量和成员变量
- Python中的实例变量和类变量
- 优酷土豆实时推荐系统架构升级实践
- 【算法】【Dynamic Programming】Wiggle Subsequence
- js工具类
- proc
- CCNP OSPF
- Python中的类变量在子父类中被修改时引起的变化
- 如何使用Rust提高Ruby性能
- LeetCode-53. Maximum Subarray
- python下memcache的常用操作
- AI技术与伦理
- 10年感触:架构是什么?——消灭架构!
- 数据结构之冒泡排序(java)
- 聪会长的关爱:dfs计算最大八方联通块的面积
- maven学习---基本命令使用