【类不类二】Python的类变量与实例变量
在研究类的时候,难免会有很多疑问,C论坛和博客园高手如云(不知道是不是也美女如云),
搜到了这篇博文,是介绍Python的类变量和实例变量的 ! 刚好在下对self.***这种形式的实例变
量不是很理解,就拿来与诸君共享!
C博客的大伽: http://blog.csdn.net/xxkkff/article/details/4396895
上一篇【类不类一】: http://www.cnblogs.com/Ruby517/p/5709558.html
一般的类定义是写成这种形式
class <类名>:
<语句>
不过现在我们更多是写成这种继承类的形式
class <类名>(父类名):
<语句>
其实还有一种是多重继承的类,大家有兴趣可以看下:
脚本之家的介绍: http://www.jb51.net/article/42623.htm
------------------------------------------------------------------------------------------------
切入正题,在下斗胆把原文作者的代码改了一点点
【__init__()下面一般放的是 self.*** 这种形式的,是实例变量】
【类名下面,函数外面的变量是类变量, 可以是self.__class_.***,也可以是 "类名.***" 这种形式】
# coding: utf-8 # 这种写法,子类Test的首字母要大写,父类object不能大写
class Test(object): count = 0 # 这个count啊,就叫做"类变量" def __init__(self): self.count = count # 这个self.count,就叫实例变量
# self.__class_ 用于获取对应的类本身的变量, 也就是类变量
# 也可写成 Test.count 的形式
self.__class__.count += 1 a = Test(3)
print a.count
输出 3 print Test.count
输出 1 b = Test(-1)
print b.count
输出 -1 print Test.count
输出 2
点我
从上面可知,类变量是所有类的实例(也就是对象)共有的,可共用,所以它是具有叠加性的,每次加1
的结果都会传递给下一个对象!与之相反, 实例变量只能是用于用于同个实例。也就是同一类的实例
可拥有不同的实例变量!
-------------------------------------------------------------------------------------------------
豆瓣上有位仁兄,出了几道关于Python类变量和实例变量的题很有意思,现在 Copy 如下:
class aa:
w = 10
def __init__(self):
self.x = 11
self.y = 12
def add(self):
return self.x + self.y
a = aa()
print a.add()
#下边两条指令各起何作用?结果是输出两个 20 么?还是两个13?还是?
aa.w = 20
a.w = 13
print aa.w, a.w
#程序继续增加如下,怎样理解这t和q呢?他们是___变量
a.t = 14
a.q = 15
print a.t, a.q
#程序继续增加如下,怎样理解这m和n呢?他们是___变量
aa.m = 30
aa.n = 40
print aa.m, aa.n
#好了再来个提升吧
#程序继续增加,下列三个print语句都能正确执行么?为何?
b = aa()
print b.x,b.y
print b.t,b.q
print b.m,b.n
【答案】: 实例变量,类变量,最后一题的第二个print语句不能执行!!!
【结论】: 因为在类以外新建的实例变量是属于某个" 实例/对象 "所有,所以不同实例/对象无法共用,
而类变量,只要是属于同个类的实例,都可以用
原文: https://www.douban.com/note/335390281/?start=0&post=ok#last
-------------------------------------------------------------------------------------------------
继续了解类,可参考:
【类不类3】: http://www.cnblogs.com/Ruby517/p/5724385.html
【类不类二】Python的类变量与实例变量的更多相关文章
- Python基础-类变量和实例变量
Python基础-类变量和实例变量 写在前面 如非特别说明,下文均基于Python3 大纲: 1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Genera ...
- python(四)类变量和实例变量
转载自[1] 实际这是个实例变量是否指向类变量的问题. python的类变量和实例变量,顾名思义,类变量是指跟类的变量,而实例变量,指跟类的具体实例相关联的变量,具体体现为self.x 等.实际要注意 ...
- python的类变量与实例变量
python的类内部定义的变量 ,形式上没有区分实例变量和类变量(java的静态变量),测试结果如下:
- python的类变量与实例变量以及__dict__属性
关于Python的实例变量与类变量,先来看一段可能颠覆世界观的例子 #!/usr/bin/env python # -*- coding: utf_8 -*- # Date: 2016年10月10日 ...
- Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性
什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html 什么是 Python 类.类对象.实例对象 https://www.cnblogs.com ...
- python中的实例方法、静态方法、类方法、类变量和实例变量
class MyTest: myname = 'peter' # add a instance attribute def __init__(self, name): self.n ...
- python——实例方法、静态方法、类方法、类变量和实例变量浅析
概述: 实例方法就是类的实例能够使用的方法. 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使用装饰器@staticmethod定义静态方法.类对象和实例都可调用静态 ...
- python的局部变量,全局变量,类变量,实例变量
定义: a.全局变量:在模块内.在所有函数外面.在class外面,这就是全局变量. b.局部变量:在函数内.在class的方法内(未加self修饰的),这就是局部变量. c. 静态变量:在class内 ...
- 关于python类变量和实例变量
今天在看python的类和实例的时候,突然发现了一个以前遗漏的点,也就是类变量和实例变量.首先需要理解一下类变量和实例变量的概念. 类全局变量:在类中定义,对类和由类生成的实例生效,如果通过方法对类变 ...
随机推荐
- JPA 批注参考
body, p, th, td, li, ul, ol, h1, h2, h3, h4, h5, h6, pre { font-family: simsun; line-height: 1.4; } ...
- spring.net AOP初探
AOP是什么? 面向切面编程,在OO中有一个开放关闭原则,及对修改关闭,对扩展开放.AOP可以说是设计模式的集合加强版,使用代理.工厂.策略等等模式,来实现方法的结合.这样说还比较模糊,我们先往下看. ...
- 使用 Python 开始游戏开发
使用 Python 开始游戏开发 这是一篇由教程团队成员Julian Meyer发表的文章,一个12岁的python开发人员.你可以在Google+和Twitter上找到他. 你可曾想过如何创建视频游 ...
- IP选路
IP选路 1.概述 路由算法是用于获取路由表中的路由项目.它是路由选择协议的核心. 2.路由算法的分类 从路由算法能否随网络的通信量或拓扑自适应的进行调整变化来分,可以分为两类. ...
- service structure flowchart [mobile to server via TCP/IP protocol]
For instant message delivering
- MS Sql Server 消除重复行 保留信息完整的一条 2011-11-26 13:19(QQ空间)
select company ,count(company) as coun into myls from mylist group by company having count(company)& ...
- hdu1263 水果(结构体排序)
Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样J ...
- .Net程序员学用Oracle系列(2):准备测试环境
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.创建说明 1.1.为什么要创建的测试环境? 1.2.了解 Oracle 实例的默认用户 2.创建环境 2.1.创建基本环境 ...
- php最新学习-----文件的操作
一.文件:文件和目录 (1)判断文件的类型用:filetype() filetype("文件路径+文件名") //判断文件的类型 例如:我这里查找的的上一级目录中的json文件,输 ...
- 采用apicloud开发移动端项目心得体会
作为第一批吃螃蟹的,来说一说apicloud做移动端项目的一些体会. 刚开始接到项目,需要移动端开发两个项目,公司人员里面没有一个会原生android或者ios开发的,目前能出的技术也就是web,后端 ...