类内self与类名调用的区别

python面向对象编程中,self作用类似于c++的this,即指向当前的对象。

 1 class TempRes(object):
 2     RetDc = 1
 3     ErrDc = 0
 4     def __init__(self):
 5         print TempRes.RetDc
 6         print self.RetDc
 7         pass
 8     def setRet(self,value):
 9         self.RetDc=value 
10 obj1=TempRes()

此时输出结果是一样的,都是1

 1 class TempRes(object):
 2     RetDc = 1
 3     ErrDc = 0
 4     def __init__(self):
 5         print TempRes
 6         print self
 7         pass
 8     def setRet(self,value):
 9         self.RetDc=value 
10 obj1=TempRes()

此时输出对象:

C:UsersNemoDesktop>python test.py
<class '__main__.TempRes'>
<__main__.TempRes object at 0x024DCD30>

可以看出 一个是类 一个是对象。

改变成员变量的值时:

 1 class TempRes(object):
 2     RetDc1 = 1
 3     RetDc2 = 1
 4     def __init__(self):
 5         pass
 6     def setRet(self,value):
 7         self.RetDc1=value 
 8         TempRes.RetDc2=value 
 9 obj1=TempRes()
10 obj2=TempRes()
11 
12 obj1.setRet(333)
13 
14 print obj1.RetDc1
15 print obj2.RetDc1
16 
17 print obj1.RetDc2
18 print obj2.RetDc2

运行结果:

333
1
333
333

因此可以看出,类内对self成员变量的改变,只对当前对象有效。

而对类变量例如8行的 TempRes.RetDc2=value ,改变则影响到跨对象有效。有点类似于tcl语言的common变量的定义。

原文地址:https://www.cnblogs.com/nemolmt/p/6646764.html