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变量的定义。

  • 相关阅读:
    OpenCV 图像旋转
    单链表插入与删除数据
    opencv 数据训练
    C++ 小波变换
    二十七、miniscrapy,scrapy源码初解
    二十六、Scrapy自定义命令
    二十五、scrapy中的去重规则及自定义
    二十四、在scrapy中如何获取cookies
    十六、 IO多路复用,异步非阻塞
    五、IO模型简介
  • 原文地址:https://www.cnblogs.com/nemolmt/p/6646764.html
Copyright © 2011-2022 走看看