python 类变量、实例(成员)变量、局部变量小结

假设我们有这样一个py文件:  

def fun():
print 'dada'
return u'welcome'


class Base:
a = fun()
def __init__(self,c):
self.b = u'你好'
print self.a
base1 = Base()

(1)首先,很容易看出a为类变量,b为实例变量,c为局部变量。
(2)再讲解下当我们执行这个py文件时,内存是怎么分配的。
  1.   首先回加载func方法到内存【类比 java,暂时认为在方法区】
  2.   由于类有自己的存储空间,因此加载Base类到内存,同时加载__init__【暂时认为在方法区】
  3.      创建base1实例,为其分配内存,同时执行__init__方法

     

  (3)再讲解类变量,实例变量如何调用

  1.   通过上面的存储图可看出,a是由Base调用,b是由base1调用,那么base1能否调用a呢? 分为两种情况:(1)例如print base1.a【这时输出的就是a的值】         【原因:猜想是先从base1的存储区查找a,没有的话就去Base区查找,然后找到了,最后输出】 。(2)base1.a = 'nihao',这时其实是为base1实例创建了一        个实例变量a,与之前的类变量a无关。
  2.      因此,无论在类内外,当调用类变量a时,就用Base.a,当调用实例变量b时,就使用base1.b

 

 


    

  

 

 

 

  

 

posted @ 2017-04-08 11:24  fs阿杰  阅读(561)  评论(0编辑  收藏  举报