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文件时,内存是怎么分配的。
- 首先回加载func方法到内存【类比 java,暂时认为在方法区】
- 由于类有自己的存储空间,因此加载Base类到内存,同时加载__init__【暂时认为在方法区】
- 创建base1实例,为其分配内存,同时执行__init__方法
(3)再讲解类变量,实例变量如何调用
- 通过上面的存储图可看出,a是由Base调用,b是由base1调用,那么base1能否调用a呢? 分为两种情况:(1)例如print base1.a【这时输出的就是a的值】 【原因:猜想是先从base1的存储区查找a,没有的话就去Base区查找,然后找到了,最后输出】 。(2)base1.a = 'nihao',这时其实是为base1实例创建了一 个实例变量a,与之前的类变量a无关。
- 因此,无论在类内外,当调用类变量a时,就用Base.a,当调用实例变量b时,就使用base1.b