在研究类的时候,难免会有很多疑问,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. 数据访问模式之Repository模式

    数据访问模式之Repository模式   数据访问层无非就是对数据进行增删改查,其中增.删.改等我们可以抽象出来写一个公共的接口或抽象类来定义这些方法,并采用一个基类实现这些方法,这样该基类派生的子 ...

  2. 从零开始学C++之STL(四):算法简介、7种算法分类

    一.算法 算法是以函数模板的形式实现的.常用的算法涉及到比较.交换.查找.搜索.复制.修改.移除.反转.排序.合并等等. 算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用. 算法的 ...

  3. python实现基于CGI的Web应用

    python实现基于CGI的Web应用 本文用一个“网上书店”的web应用示例,简要介绍如何用Python实现基于CGI标准的Web应用,介绍python的cgi模块.cigtb模块对编写CGI脚本提 ...

  4. 解决Eclipse maven servlet-api-2.5.jar jar not loaded问题

    在Eclipse中用maven构建web项目时,如果在pom里写了servlet-api和jsp-api的依赖的话,即使scope为"provided",但在布署到tomcat时, ...

  5. 应用之星在线app开发平台,菜鸟也会做应用

    看着各类应用平台玲琅满目的应用,你是否幻想过,如果里面能有一款我开发的应用是件多NB的事,平凡的你肯定会说,我又不会设计又不会代码,怎么可能?现在告诉你,这不是幻想,即使你不会设计也不会代码,一样可以 ...

  6. 用JSP+JavaBean开发模式实现一个销售额的查询

    数据库使用mysql,如下: vo包的Sales类: package com.vo; public class Sales {  public String salestime;  public fl ...

  7. 在android里用ExpandableListView实现二层和三层列表

    转载自http://www.cnblogs.com/nuliniaoboke/archive/2012/11/13/2767957.html 二层列表是直接用androidAPI中的Expandabl ...

  8. Js-Html 前端系列--Ajax

    最近在做Web项目,用到很多Ajax,也遇到很多问题.下面与大家分享. Ajax传参 Ajax同步与异步 Ajax与谷歌浏览器 Ajax传参 我们一般传参有两种形式: $.ajax({ ... dat ...

  9. xhtml头文件设置

    设置字符集编码: <head> <meta http-equiv="Content-Type" Content="text/html" cha ...

  10. 你确实应该学习并使用的 10 个 C# 特性

    1) async / await 使用 async / await 模式,可以在执行代码块操作的时候不会阻塞 UI 或者当前的线程.即使该操作被某些执行动作延迟了(比如一个 web 请求),async ...