类不类二Python的类变量与实例变量

Posted 千秋邈矣独留我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类不类二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_.***,也可以是 "类名.***" 这种形式】

 1 # coding: utf-8
 2  
 3 # 这种写法,子类Test的首字母要大写,父类object不能大写
 4 class Test(object):
 5  
 6     count = 0                      # 这个count啊,就叫做"类变量"
 7      
 8     def __init__(self):
 9           
10         self.count = count         # 这个self.count,就叫实例变量  
11         # self.__class_ 用于获取对应的类本身的变量, 也就是类变量
12         # 也可写成 Test.count 的形式 
13         self.__class__.count += 1 
14  
15 a = Test(3)
16 print a.count
17 输出 3
18  
19 print Test.count
20 输出 1
21  
22 b = Test(-1)
23 print b.count
24 输出 -1
25  
26 print Test.count
27 输出 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 中拥有受保护的类变量或方法? [复制]

# yyds干货盘点 # Python面向对象中的类变量,实例变量怎么来理解?

python中的类

python 类变量和实例变量

python 面向程序编程