关于python中的self,ins,cls的解释参考下面两篇博文self比较好理解,self指的是类实例对象本身(注意:不是类本身)

class Person:

def _init_(self,name):

self.name=name

def sayhello(self):

print 'My name is:',self.name

p=Person('Tom')

print p

为什么不是指向类本身呢,如下例子:

class Person:

def _init_(self,name):

self.name=name

def sayhello(self):

print 'My name is:',self.name

p=Person('Tom')

p1 = Person('Jim')

print p

如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?

如果用了staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用

class A(object):

def foo1(self):

print "Hello",self

@staticmethod

def foo2():

print "hello"

@classmethod

def foo3(cls):

print "hello",cl

二、上面例子已经看到cls, 对于classmethod,它的第一个参数不是self,是cls,它表示这个类本身。

class A(object):

def foo1(self):

print "Hello",self

@staticmethod

def foo2():

print "hello"

@classmethod

def foo3(cls):print "hello",cls # cls就是类A本身

a = A()

a.foo1()

>>hello <__main__.A object at 0x03169110>

A.foo1(a) #这里传入实例a,相当于普通方法的self

>>hello <__main__.A object at 0x03169110>

A.foo2() #这里,由于静态方法没有参数,故可以不传东西

>>hello

A.foo3() #这里,由于是类方法,因此,它的第一个参数为类本身。

>>hello

print A #可以看到,直接输入A,与上面那种调用返回同样的信息。

>>

class Desc:

def __get__(self, ins, cls):

print('self in Desc: %s ' % self )

print(self, ins, cls)

class Test:

x = Desc()

def prt(self):

print('self in Test: %s' % self)

t = Test()

t.prt()

t.x

运行结果如下:

self in Test: <__main__.Test object at 0x0000000002A570B8>

self in Desc: <__main__.Desc object at 0x000000000283E208>

<__main__.Desc object at 0x000000000283E208> <__main__.Test object at 0x0000000002A570B8>

大部分童鞋开始有疑问了,为什么在Desc类中定义的self不是应该是调用它的实例t吗?怎么变成了Desc类的实例了呢?

注意:这里调用的是t.x,也就是说是Test类的实例t的属性x,由于实例t中并没有定义属性x,所以找到了类属性x,而该属性是描述符属性,为Desc类的实例而已,所以此处并没有顶用Test的任何方法。

那么我们如果直接通过类来调用属性x也可以得到相同的结果。

下面是把t.x改为Test.x运行的结果。

self in Test: <__main__.Test object at 0x00000000022570B8>

self in Desc: <__main__.Desc object at 0x000000000223E208>

<__main__.Desc object at 0x000000000223E208> None

题外话:由于在很多时候描述符类中仍然需要知道调用该描述符的实例是谁,所以在描述符类中存在第二个参数ins,用来表示调用它的类实例,所以t.x时可

以看到第三行中的运行结果中第二项为

0x0000000002A570B8>。而采用Test.x进行调用时,由于没有实例,所以返回None。

python cls_关于python中的self,ins , cls的解释相关推荐

  1. 关于python中的self,ins , cls的解释

    关于python中的self,ins , cls的解释 https://blog.51cto.com/10250691/1890078

  2. python 冷门知识点_Python中的10条冷门知识

    下面时Python中一些不常见的冷门知识,感兴趣的小伙伴不妨来学习一下. 1.省略号也是对象 - 这是省略号,在Python中,一切皆对象.它也不例外.在 Python 中,它叫做 Ellipsis ...

  3. 使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图

    使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图 1. EoN是什么 2. 安装 3. 效果图 4. 源代码 4.1 源码 4.2 源码 参考 写这篇博客源于博友的提问 ...

  4. 使用Python,OpenCV在视频中进行实时条形码检测

    使用Python,OpenCV在视频中进行实时条形码检测 1. 步骤 2. 适用场景及优化 3. 总结 4. 源码 参考 上一篇博客介绍了如何检测和查找图像中的条形码.这篇博客将进行一些优化以检测实时 ...

  5. python缩进在程序中长度统一且强制使用_Python习题纠错1

    February, 1991 0.9.1 2.Python语言的缩进只要统一即可,不一定是4个空格(尽管这是惯例). Python缩进在程序中长度统一且强制使用. 3.IPO:Input Proces ...

  6. mac搭建python开发环境_Mac中基于Homebrew搭建python开发环境

    转移到mac上了.这里是在lion中搭建python开发环境的简单记录.这份记录不是一份step by step.而是事后写的记录,可能有记忆遗漏.如果有错误,请指正. 1.安装homebrew的准备 ...

  7. python调用js库中的函数_Python 调用JS文件中的函数

    Python 调用JS文件中的函数 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r&q ...

  8. python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation)

    python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation Funct ...

  9. python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD)

    python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD.Median Absolute Devi ...

最新文章

  1. oracle进城有哪些,oracle主要进程详解
  2. 钱大妈数据中台建设最佳实践
  3. 利用OpenCV进行人脸识别
  4. php当前月每天时间戳,php获取当前月与上个月月初及月末时间戳的方法
  5. Java入门知识,写一个最简单java程序
  6. 解决 phpmyadmin #2002 无法登录 MySQL 服务器
  7. 国际化android
  8. angular中注入依赖(分页功能)。。。
  9. springboot14 整合JDBC
  10. python大神作品_Python大神的书单
  11. (转)黑石帝国崛起的30年
  12. 100个C语言经典小程序和C语言编写的小游戏
  13. MEMORY系列之“DRAM概述”
  14. IT领域的罗马帝国——微软公司
  15. 计算机主板启动加密码,电脑主板BIOS加密解密设置
  16. 蒲公英服务器搭建小程序,uniapp 小程序打包发布
  17. 干货 :什么是数据科学?如何把数据变成产品?
  18. 用Excel做排列图
  19. 如何在 微软Microsoft 官网 下载 office365
  20. c++中sqrt函数的使用

热门文章

  1. drools6.5_Drools 6.2.0.Final发布
  2. java压缩文件读取_用Java读取/写入压缩和非压缩文件
  3. Kogito,ergo规则:从知识到服务,轻松自如
  4. java 参数命名冲突_Java中的命名参数
  5. war3必须安装的游戏组件_在单独的WAR组件中对SPA资源和API实现进行分区
  6. tomcat 正常关闭_Tomcat的带有守护程序和关闭钩子的正常关闭
  7. 如何用Java编写类似C的Sizeof函数
  8. java集合提取最小的日期_提取Java集合的元素-Java 8方法
  9. maven插件编写_编写Maven插件的提示
  10. Java 9对可选的补充