zoukankan      html  css  js  c++  java
  • 类内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变量的定义。

  • 相关阅读:
    软考
    十步走-阅读笔记
    软著申请
    十步走-阅读笔记
    基于Ubuntu安装部署ZooKeeper
    基于Ubuntu安装JDK(OPenJDK8)
    Intern Day89
    阿里巴巴Java研发工程师技术一面
    面试
    6_moc.md
  • 原文地址:https://www.cnblogs.com/nemolmt/p/6646764.html
Copyright © 2011-2022 走看看