在研究类的时候,难免会有很多疑问,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的类变量与实例变量的更多相关文章

  1. Python基础-类变量和实例变量

    Python基础-类变量和实例变量 写在前面 如非特别说明,下文均基于Python3 大纲: 1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Genera ...

  2. python(四)类变量和实例变量

    转载自[1] 实际这是个实例变量是否指向类变量的问题. python的类变量和实例变量,顾名思义,类变量是指跟类的变量,而实例变量,指跟类的具体实例相关联的变量,具体体现为self.x 等.实际要注意 ...

  3. python的类变量与实例变量

    python的类内部定义的变量 ,形式上没有区分实例变量和类变量(java的静态变量),测试结果如下: 

  4. python的类变量与实例变量以及__dict__属性

    关于Python的实例变量与类变量,先来看一段可能颠覆世界观的例子 #!/usr/bin/env python # -*- coding: utf_8 -*- # Date: 2016年10月10日 ...

  5. Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性

    什么是对象和类 https://www.cnblogs.com/poloyy/p/15178423.html 什么是 Python 类.类对象.实例对象 https://www.cnblogs.com ...

  6. python中的实例方法、静态方法、类方法、类变量和实例变量

    class MyTest: myname = 'peter' # add a instance attribute    def __init__(self, name):        self.n ...

  7. python——实例方法、静态方法、类方法、类变量和实例变量浅析

    概述: 实例方法就是类的实例能够使用的方法. 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使用装饰器@staticmethod定义静态方法.类对象和实例都可调用静态 ...

  8. python的局部变量,全局变量,类变量,实例变量

    定义: a.全局变量:在模块内.在所有函数外面.在class外面,这就是全局变量. b.局部变量:在函数内.在class的方法内(未加self修饰的),这就是局部变量. c. 静态变量:在class内 ...

  9. 关于python类变量和实例变量

    今天在看python的类和实例的时候,突然发现了一个以前遗漏的点,也就是类变量和实例变量.首先需要理解一下类变量和实例变量的概念. 类全局变量:在类中定义,对类和由类生成的实例生效,如果通过方法对类变 ...

随机推荐

  1. 关于Symfony2+nginx搭建过程总结

    关于Symfony2+nginx搭建过程总结 最近在试着用nginx+symfony搭建公司的网站,由于nginx不支持pathinfo模式,所以必须修改nginx(我使用的是nginx1.5.1)的 ...

  2. asp.net通用查询模块设计

    asp.net通用查询模块设计 前言 自从上次狂喷了devexpress for asp.net面向互联网的app的各种不合理,好像骂的dev无处容身了,不过说实话,dev在做互联网的app时,生成的 ...

  3. 10169 - Urn-ball Probabilities !

    描述:有两个罐子,一个罐子里有一个红球,另一个罐子里有一个红球和一个白球,每次从两个罐子里各取一个球,然后在向每个罐子里各加一个白球,一次取到两个红球时就结束取球,求n次取球中至少一次为取球为红球的概 ...

  4. continue与break

    1.continue语句,1至20内奇数累加和 #include<iostream> using namespace std; void main(){ int i=0; int sum= ...

  5. Linux内核 hlist_head/hlist_node结构解析

    内核中的定义: struct hlist_head {    struct hlist_node *first;}; struct hlist_node {    struct hlist_node ...

  6. IDEA maven项目创建速度慢

    1.使用的是mvn创建项目 mvn archetype:generate -DarchetypeCatalog=internal 2.使用的是IDEA创建项目 close所有project 在conf ...

  7. C语言之分支结构 if(二)

    If的第三种和第四种形式(tips:也是比较常用的形式) 3).if语句第三种形式: 简单来说就是任意的if或者else里面还可以嵌套任意的if-else语句 语法: if(表达式){ if(表达式2 ...

  8. abstract class与interface的区别与联系

    1.相同点:A. 两者都是抽象类,都不能实例化.B. interface实现类及abstract class的子类都必须要实现已经声明的抽象方法. 2. 不同点:A. interface需要实现,要用 ...

  9. Time_wait问题小结

    TIME_WAIT的产生原因 因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭.先发FIN包的一方执行的是主动关闭:后发FIN包的一方执行的是被动关闭.主动关闭的一方会进入TIME ...

  10. Codevs 4189 字典

    4189 字典 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n ...